Как получить соответствующее значение из результатов, сгенерированных оператором foreach

Я создаю страницу корзины Используемый пакет - Crinsane/LaravelShoppingcart

Чтобы добавить количество, я использую вызовы Ajax,
Для одного продукта я могу обновить количество и уменьшить его, все идеально. Эта проблема возникает, когда я пытаюсь добавить еще один товар в корзину и пытаюсь обновить его количество.

Я думаю, что проблема связана с моим способом захвата rowID. Поскольку я использую foreach и вызываю его класс, я получаю только первый я бы.

Я не уверен, как мне получить идентификатор по-другому. Я не вставляю весь код корзины, так как это было бы длиннее

Вот мой код,

Blade:

@foreach (Cart::Content() as $cartcontent)
<footer class = "content">
                <input type = "hidden" class = "rowID" name = "" value = "{{$cartcontent->rowId}}">
                <span class = "qt-minus">-</span>
                <span class = "qt">{{$cartcontent->qty}} </span>
                <span class = "qt-plus">+</span>
                <h2 class = "full-price">
                    {{$cartcontent->model->presentPrice() * $cartcontent->qty}}
                </h2>

                <h2 class = "price">
                    {{$cartcontent->model->presentPrice()}}
                </h2>
            </footer>
<br>@endforeach

В исходном коде html приведенный выше идентификатор строки отличается

js

$(document).ready(function(){  

    function cartLogic(){
      // var rowID = $('#rowID').val();
      var rowID =  $('.rowID').val();
    var quantity = $('.qt').text();
    console.info(rowID);
    console.info(quantity);
    $.ajax({
                url: 'cart/'+ rowID,
                // url: 'cart/'+ $('#rowID').val(),
                type: 'PATCH',
                data: {  "_token": "{{ csrf_token() }}",
                quantity : quantity,
                 _method: "PATCH"},
                success: function(res) {
console.info(res);
// window.location.reload();
                }
        });
    }

  $(".qt-plus").click(function(){
    $(this).parent().children(".qt").html(parseInt($(this).parent().children(".qt").html()) + 1);
    //  console.info('working');
       cartLogic();

  });

Controller

public function update(Request $request, $id)
    {
        // return $request->all();
        // dd(Cart::content());
        $quantity = $request->quantity;
        Cart::update($id, $quantity); // Will update the quantity

    }

Route

Route::patch('cart/{id}', 'CartController@update')->name('cart.update');

Когда я просматриваю console.info(rowID); Я получаю только первый идентификатор продукта. Что нужно сделать, чтобы получить соответствующий ID

Любая помощь должна быть высоко оценена

.val() используется в режиме чтения, получает значение только из первого элемента - как явно указано в документации. Если вам нужны значения всех элементов, вам нужно петля всех элементов и получить значение для каждого из них в отдельности.
misorude 18.07.2019 13:26

Спасибо за ответ @misorude. В настоящее время я переписываю код.

mightyteja 18.07.2019 13:29

(И вы, вероятно, захотите получить текстовое содержимое из элементов .qt по отдельности. .text() ведет себя иначе, чем .val(), и сочетает в себе текстовое содержимое всех элементов — но, вероятно, это не то, что вам нужно здесь.)

misorude 18.07.2019 13:29
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
49
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот что вы можете сделать на стороне клиента:

function cartLogic(rowID){
    $.ajax({
        url: 'cart/'+ rowID,
        type: 'PATCH',
        data: { 
            "_token": "{{ csrf_token() }}",
            _method: "PATCH"
        },
        success: function(res) {
            console.info(res);
        }
    });
}

$(".qt-plus").click(function() {
    $(this).parent().children(".qt").html(parseInt($(this).parent().children(".qt").html()) + 1);
    // Here you get ID of a cart record
    var rowID = $(this).parent().find('.rowID').val();

    cartLogic(rowID);
});

Обратите внимание, что я удалил quantity из ajax-запроса. Если вам это нужно - вы можете добавить его вторым параметром в cartLogic. Но будьте осторожны, что кто-то может изменить js-скрипт и передать значение 10000000000 как количество или -42. Что вы тогда будете делать?) Итак, безопаснее передать на сервер только id записи корзины и увеличить количество на 1 на сервере.

На стороне сервера вы должны обновить свою запись с помощью запроса, например:

UPDATE `table_name` SET quantity = quantity + 1 WHERE rowID = id

Большое спасибо, приведенное выше решение решило проблему. Я боролся за последние 8 часов, чтобы решить эту проблему. :)

mightyteja 18.07.2019 14:21

Другие вопросы по теме