我有一个存储在会话中的购物车,我想刷新会话而不重新加载页面 我试过这个: 视图:
<a href="#" id="product" data-id="{{ $product->id }}" class="item_add single-item hvr-outline-out button2">Add to cart</a>
<script>
$(document).ready(function() {
$('#product').click(function(event) {
event.preventDefault();
let url = "{{ route('add-to-cart') }}";
let id = $(this).data('id');
$.ajax({
url: url,
type: 'POST',
data: {product_id: id, _token: "{{ Session::token() }}"}
})
.done(function() {
console.log("success");
})
.fail(function() {
console.log("error");
})
});
});
路线:
Route::post('/add-to-cart', 'ProductsController@addToCart')->name('add-to-cart');
的ProductsController:
public function addToCart(Request $request)
{
if ($request::ajax()) {
$id = $request->product_id;
$product = Product::find($id);
if (Session::has('products')) {
$products = Session::get('products');
$products[] = $product;
Session::put('products', $products);
}
else {
$products = array($product);
Session::put('products', $products);
}
return response()->json();
}
}
当我点击添加到购物车时,它在控制台中提供了500(内部服务器错误)
答案 0 :(得分:2)
您应该使用ajax()
来静态访问::
方法(使用->
):
if ($request->ajax()) {
使用Laravel日志文件
正如评论中所提到的,Laravel可能会在storage/logs/laravel.log
中告诉你这一点,并且有一个很长的调用堆栈跟踪(你提到的行,从&#34开始;#38&#34;和& #34;#39&#34)。只需滚动到#34;#1&#34;而且你会发现你的罪魁祸首。
答案 1 :(得分:0)
Laravel不允许不通过X-CSRF-TOKEN, 以下是我的工作实例希望它可以帮助你。
路线:
Route::post('block-user','UserController@BlockUser');
现在你需要在你的ajax调用之前添加ajax设置 blade.php:
在标题
中添加此内容<meta name="csrf-token" content="{{ csrf_token() }}" />
我的剧本如:
<script>
//Ajax setup
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
//Ajax call
$(".blockuser").bootstrapSwitch();
$('.blockuser').on('switchChange.bootstrapSwitch', function () {
var userid = $('#userid').val();
$.ajax({
url:'/block-user',
data:{user_id : userid},
type:'post',
success: function(data){
alert(data);
}
});
});
</script>
控制器:
public function BlockUser(Request $request)
{
$userid = $request->get('user_id');
//perform operation
}