会话在第二次请求之前不起作用

时间:2017-08-15 16:42:44

标签: php laravel session laravel-5 session-variables

我正在使用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');
            }
        }
    });
}

1 个答案:

答案 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);
            }
        }