如何使用 Laravel 中的 Ajax 更新购物车数量
How to update cart quantity with Ajax in Laravel
我正在使用 https://packagist.org/packages/bumbummen99/shoppingcart 的一个包,它在我的 Laravel 7.3 框架中扩展了 Crinsane/LaravelShoppingCart,我正在努力更新我的购物车数量 Ajax 直接在我的购物车中查看。
我收到状态代码 500 - 内部服务器错误,即使我在 ajax 调用中通过我的数据发送了 csrf header。
查看 (cart.blade.php)
<tbody>
@if(Cart::count() > 0)
@foreach(Cart::content() as $details)
<tr id="product-show">
<td data-th="Product">
<div class="row">
<div class="col-sm-3 hidden-xs img-responsive"><img src="img/{!!$details->options->image!!}" width="100" height="100"/></div>
<div class="col-sm-9">
<h4 class="nomargin">{{ $details->name }}</h4>
</div>
</div>
</td>
<td data-th="Price">{{ $details->price }} RON</td>
<td data-th="Quantity">
<input type="number" value="{{ $details->qty }}" class="form-control quantity" class="quantity"/>
</td>
<td data-th="Subtotal" class="text-center" id="total-price">{{ $details->price * $details->qty }} RON</td>
<td class="actions text-center" data-th="">
<button class="btn btn-info btn-sm update-cart" data-token="{{ csrf_token() }}" data-id="{{ $details->rowId}}" style="margin: 10px;">
<i class="fa fa-refresh"></i> Refresh</button>
<button class="btn btn-danger btn-sm remove-from-cart" data-token="{{ csrf_token() }}" data-id="{{ $details->rowId}}" style="margin: 10px;">
<i class="fa fa-trash-o"></i>Delete</button>
</td>
</tr>
@endforeach
@endif
</tbody>
Ajax 脚本
$(".update-cart").click(function (e) {
e.preventDefault();
var ele = $(this);
$.ajax({
url: "{{ url('update-cart') }}",
method: "patch",
data: {_token: '{{ csrf_token() }}', id: ele.attr("data-id"), quantity:
ele.parents("tr").find(".quantity").val()},
success: function (response) {
window.location.reload();
}
});
});
控制器
public function updateCart(Request $request){
$cart = Cart::content()->where('rowId', $request->id);
//update quantity
//dd($cart);
return view('pages.cart')->with('cart-success', 'Cart updated');
}
路线
Route::patch('update-cart', 'ProductController@updateCart');
我不知道我做错了什么,而且在我将购物车存放在我的 session 之前它工作正常。
如果有任何建议,我将不胜感激,我不知道如何解决这个问题。谢谢你们!
- 如果您在测试服务器上,请在您的 .env 文件中将 debug 设置为 true,您的响应将是更详细的错误消息
或者,
- 查看 storage/logs 文件夹中的 laravel.log 文件,您会找到更详细的信息。
我正在使用 https://packagist.org/packages/bumbummen99/shoppingcart 的一个包,它在我的 Laravel 7.3 框架中扩展了 Crinsane/LaravelShoppingCart,我正在努力更新我的购物车数量 Ajax 直接在我的购物车中查看。
我收到状态代码 500 - 内部服务器错误,即使我在 ajax 调用中通过我的数据发送了 csrf header。
查看 (cart.blade.php)
<tbody>
@if(Cart::count() > 0)
@foreach(Cart::content() as $details)
<tr id="product-show">
<td data-th="Product">
<div class="row">
<div class="col-sm-3 hidden-xs img-responsive"><img src="img/{!!$details->options->image!!}" width="100" height="100"/></div>
<div class="col-sm-9">
<h4 class="nomargin">{{ $details->name }}</h4>
</div>
</div>
</td>
<td data-th="Price">{{ $details->price }} RON</td>
<td data-th="Quantity">
<input type="number" value="{{ $details->qty }}" class="form-control quantity" class="quantity"/>
</td>
<td data-th="Subtotal" class="text-center" id="total-price">{{ $details->price * $details->qty }} RON</td>
<td class="actions text-center" data-th="">
<button class="btn btn-info btn-sm update-cart" data-token="{{ csrf_token() }}" data-id="{{ $details->rowId}}" style="margin: 10px;">
<i class="fa fa-refresh"></i> Refresh</button>
<button class="btn btn-danger btn-sm remove-from-cart" data-token="{{ csrf_token() }}" data-id="{{ $details->rowId}}" style="margin: 10px;">
<i class="fa fa-trash-o"></i>Delete</button>
</td>
</tr>
@endforeach
@endif
</tbody>
Ajax 脚本
$(".update-cart").click(function (e) {
e.preventDefault();
var ele = $(this);
$.ajax({
url: "{{ url('update-cart') }}",
method: "patch",
data: {_token: '{{ csrf_token() }}', id: ele.attr("data-id"), quantity:
ele.parents("tr").find(".quantity").val()},
success: function (response) {
window.location.reload();
}
});
});
控制器
public function updateCart(Request $request){
$cart = Cart::content()->where('rowId', $request->id);
//update quantity
//dd($cart);
return view('pages.cart')->with('cart-success', 'Cart updated');
}
路线
Route::patch('update-cart', 'ProductController@updateCart');
我不知道我做错了什么,而且在我将购物车存放在我的 session 之前它工作正常。
如果有任何建议,我将不胜感激,我不知道如何解决这个问题。谢谢你们!
- 如果您在测试服务器上,请在您的 .env 文件中将 debug 设置为 true,您的响应将是更详细的错误消息 或者,
- 查看 storage/logs 文件夹中的 laravel.log 文件,您会找到更详细的信息。