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

时间:2019-07-18 11:23:20

标签: php jquery ajax laravel

我正在创建购物车页面 使用的软件包-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

任何帮助都应引起赞赏

1 个答案:

答案 0 :(得分:1)

这是您可以在客户端执行的操作:

function cartLogic(rowID){
    $.ajax({
        url: 'cart/'+ rowID,
        type: 'PATCH',
        data: { 
            "_token": "{{ csrf_token() }}",
            _method: "PATCH"
        },
        success: function(res) {
            console.log(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);
});

请注意,我从ajax查询中删除了quantity。如果需要-可以将其作为第二个参数添加到cartLogic中。但请注意,有人可以修改js脚本并传递10000000000值作为数量或-42。那么,您会怎么做?)因此,将购物车记录的ID传递到服务器并在服务器上增加数量1更为安全。

在服务器端,您应该使用以下查询更新记录:

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