我正在创建购物车页面 使用的软件包-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
任何帮助都应引起赞赏
答案 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