Laravel blade for loop отправляет первый элемент формы с помощью Jquery AJAX но для других выдает ошибку
Таким образом, мой вид отображает продукты в виде карты, где каждая карта имеет кнопку Добавить в корзину, которая отправляет форму через AJAX JQuery. Карточки продуктов заполняются на странице через блейд для цикла. Однако это позволяет мне только добавить первый продукт в корзину. Для всех остальных это дает следующую ошибку:
Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException
The POST method is not supported for this route. Supported methods: GET, HEAD.
Я вставил свой блейд-код, который включает в себя jquery здесь, так что его легче читать: https://mystb.in/BerlinTeamsAffiliated.php-template
Мой TestController.php
, куда отправляется форма:
public function test(Request $request, Product $product){
return response()->json([
'success' => true,
'message' => 'Data inserted successfully ' . $request->name. ' '.$product->name]);
}
Маршруты файлов web.php
:
Route::get('/test', 'TestController@showTest');
Route::post('/test/{product}', 'TestController@test');
Примечание: трассировка стека laravel показывает правильную форму, отправляемую через тело запроса, но она просто выдает эту ошибку.
Ответы - Laravel blade for loop отправляет первый элемент формы с помощью Jquery AJAX но для других выдает ошибку / Laravel blade for loop submits first form item with Jquery AJAX but for others gives error

01.10.2020 02:50:58
Имя атрибута HTML id должно быть уникальным. Начиная с этой строки
<input type="hidden" name="product_id" id="product_id" value={{ $p->id }}>
является частью @foreach
, имя id="product_id"
не является уникальным.
Url-адрес, который вы используете в вызове ajax, формируется следующим образом:
var product_id = $("#product_id").val();
var url = '/test/' + product_id;
В результате значение product_id
будет пустым во всех случаях (кроме первого), а url-адрес будет /test
(без идентификатора продукта), который, по совпадению, определяется как маршрут GET.
Вы можете попытаться решить эту проблему, создав метод, который будет публиковать вашу форму с параметром product_id
в качестве параметра и вызывать этот метод при нажатии кнопки Отправить.