2017-08-15 78 views
0

我正在做一个简单的网站与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

你确定,第一个请求还要输入'if'语句,第二个呢?有可能首先请求被忽略/错误的地方? –

+0

是的,因为我在客户端的ajax中实现了成功函数,而且我使用'alert(id)',所以我知道什么时候返回一些东西。 – Clutchy

+0

您可以改用'javascript'中的'localStorage'来代替。 –

回答

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); 
      } 
     } 
+0

我试过了,但结果是一样的。 – Clutchy

+0

在这两种情况下变量'result'的值是多少? –

+0

在同一项目的前两个请求中,如果项目和第三个请求结果值为“1”,result的值就是名称。 – Clutchy