Laravel blade for loop отправляет первый элемент формы с помощью Jquery AJAX но для других выдает ошибку


Laravel blade for loop отправляет первый элемент формы с помощью Jquery AJAX но для других выдает ошибку

01.10.2020 02:05:35 Просмотров 10 Источник

Таким образом, мой вид отображает продукты в виде карты, где каждая карта имеет кнопку Добавить в корзину, которая отправляет форму через 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

Является ответом!
piscator

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 в качестве параметра и вызывать этот метод при нажатии кнопки Отправить.

Помочь в развитии проекта:
Закрыть X