如何从foreach语句生成的结果中获取相应的值

我正在创建一个购物车页面 Package used - Crinsane/LaravelShoppingcart


要添加数量,我使用 Ajax 调用,

对于单个产品,我可以更新数量并减少数量,一切都很完美。当我尝试将另一件商品添加到购物车并尝试更新其数量时,问题就出现了。


我认为问题在于我获取 rowID 的方式。由于我使用 foreach 并调用它的类,我只得到第一个 id。


我不确定如何以不同的方式获取 ID。我没有粘贴所有购物车代码,因为它会更长


这是我的代码,


刀刃:


@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源代码中上面的rowID是不同的


js


$(document).ready(function(){  


    function cartLogic(){

      // var rowID = $('#rowID').val();

      var rowID =  $('.rowID').val();

    var quantity = $('.qt').text();

    console.log(rowID);

    console.log(quantity);

    $.ajax({

                url: 'cart/'+ rowID,

                // url: 'cart/'+ $('#rowID').val(),

                type: 'PATCH',

                data: {  "_token": "{{ csrf_token() }}",

                quantity : quantity,

                 _method: "PATCH"},

                success: function(res) {

console.log(res);

// window.location.reload();

                }

        });

    }


  $(".qt-plus").click(function(){

    $(this).parent().children(".qt").html(parseInt($(this).parent().children(".qt").html()) + 1);

    //  console.log('working');

       cartLogic();


  });

控制器


public function update(Request $request, $id)

    {

        // return $request->all();

        // dd(Cart::content());

        $quantity = $request->quantity;

        Cart::update($id, $quantity); // Will update the quantity


    }

路线


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

当我查看 console.log(rowID); 我只得到第一个产品 ID。应该怎么做才能得到对应的ID


任何帮助都应该不胜感激


繁星淼淼
浏览 292回答 1
1回答

开满天机

您可以在客户端执行以下操作:function cartLogic(rowID){&nbsp; &nbsp; $.ajax({&nbsp; &nbsp; &nbsp; &nbsp; url: 'cart/'+ rowID,&nbsp; &nbsp; &nbsp; &nbsp; type: 'PATCH',&nbsp; &nbsp; &nbsp; &nbsp; data: {&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "_token": "{{ csrf_token() }}",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _method: "PATCH"&nbsp; &nbsp; &nbsp; &nbsp; },&nbsp; &nbsp; &nbsp; &nbsp; success: function(res) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.log(res);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; });}$(".qt-plus").click(function() {&nbsp; &nbsp; $(this).parent().children(".qt").html(parseInt($(this).parent().children(".qt").html()) + 1);&nbsp; &nbsp; // Here you get ID of a cart record&nbsp; &nbsp; var rowID = $(this).parent().find('.rowID').val();&nbsp; &nbsp; cartLogic(rowID);});请注意,我quantity从 ajax-query 中删除了。如果需要 - 您可以将其作为第二个参数添加到cartLogic. 但请注意,有人可以修改 js-script 并将10000000000值作为数量或-42. 那你会怎么做?)所以,将购物车记录的 id 传递给服务器并在服务器上将数量增加 1 会更安全。在服务器端,您应该使用以下查询更新您的记录:UPDATE `table_name` SET quantity = quantity + 1 WHERE rowID = id
打开App,查看更多内容
随时随地看视频慕课网APP