我正在使用Laravel创建一个简单的网站,在我的PagesController
我有一个函数可以将项目存储到会话中,如果该项目尚未存储在会话中,则递增cartCount
。
在我的网站上,每个项目都有一个按钮,点击后,使用AJAX将'item_id'
发送到调用函数postToCart
的网站。我想要做的是:成功添加项目后返回item_name
。
当我第一次点击该按钮时,它告诉我该项目已被添加,这就是我想要的。问题是,当我第二次按下按钮时,函数postToCart
再次进入if语句。问题只是第二个帖子请求之后一切正常。
public function postToCart(Request $request) {
$id = $request->input('item_id');
$item = Item::all()->where('item_id', '=', $id)->first();
if (!session()->has($id))
{
session()->put($id, 1);
session(['cartCount' => session('cartCount') + 1]);
return $item->item_name;
}
}
客户端的AJAX:
function cart_click(id, url) {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
type: 'POST',
url: url,
data: {
'item_id': id
},
success: function(result){
if (result)
{
alert('Item added: '.concat(result));
}
else
{
alert('Item already in cart');
}
}
});
}
答案 0 :(得分:0)
我认为几乎无需澄清。
首先更改postToCart()
函数以在两种情况下返回某些值(成功+失败)
public function postToCart(Request $request) {
$id = $request->input('item_id');
$item = Item::all()->where('item_id', '=', $id)->first();
$value = session($id, 0);
if ($value == 0)
{
session([$id => 1]);
session(['cartCount' => session('cartCount') + 1]);
return $item->item_name;
}
return "1";
}
在AJAX回调函数中,检查返回值,如果有正确的消息值显示发生了什么。例如我把“1”表示已存在,否则我认为它已成功插入。
success: function(result){
if (result == "1")
{
alert('Item already in cart');
}
else
{
alert('Item added: ' + result);
}
}