2015-04-02 92 views
3

我想使用Laravel5和Memcached将会话写入会话。没有AJAX它工作正常,但我需要存储多个值异步。为什么有些数据没有存储在使用memcached的Session中?

这里是我的例子Javascript代码:

var i = 1; 

for (i; i < 11; i++) { 
    var data = { 
     id: i, 
     data: 'data-' + i 
    } 

    $.ajax({ 
     url: 'api/data', 
     method: 'POST', 
     data: data 
    }); 
} 

这里是我的例子PHP代码:

post('/api/data', function() { 
    $request = \Request::all(); 

    \Session::put('key-'.$request['id'], $request['data']); 
}); 

当我火了这个曾经的js代码,我没有得到所有10个值致信

array:8 [▼ 
    "_token" => "WUv8naiJT9PEHpG4b4moZyUcTfxy4YHhdBiluB7R" 
    "_previous" => array:1 [▶] 
    "flash" => array:2 [▶] 
    "key-2" => "data-2" 
    "key-5" => "data-5" 
    "key-6" => "data-6" 
    "key-7" => "data-7" 
    "key-9" => "data-9" 
] 
:会议

这里的js代码完成输出后dd(\Session::all())

如果我多次激发js代码,我会得到存储的所有10个值。

+3

你的JS是英朗没有效率。你正在为你试图推送的每个值做一个http调用。最有可能的是你遇到了一个竞争条件:当你检查会话中的内容时,并不是所有这些多重ajax(实际上只是http)调用都已完成。这可以解释为什么当你检查后,他们“神奇地”出现 - 他们还没有到达服务器(或处理),当你去看看他们是否到达了。 – 2015-04-02 15:09:36

+0

我已经记录了请求的数据。我在日志中获得了所有10个值,这意味着所有请求都到达了服务器,或者我错过了某些东西? – 2015-04-02 15:30:12

回答

0

$ .ajax调用是异步的。

所以一些请求几乎在同一时间完成。这就是为什么你在会议

根据其请求已经session_write最后读...随机更新数据

这里只有2请求时间表:

请求1个读会话 请求2阅读会话 要求1写会话 要求2写入会议

会话数据你只有:钥匙2 =>数据-2

相关问题