我正在尝试使用Laravel5和Memcached将一些数据写入会话。没有ajax它工作正常,但我需要异步存储多个值。
这是我的示例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个值写入会话
在js代码完成后输出dd(\Session::all())
:
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代码,我会存储所有10个值。
答案 0 :(得分:0)
$ .ajax call是asynchrone。
所以有些请求几乎同时完成。这就是你在会话中随机更新数据的原因
取决于session_write最后一个请求并读取...
这是一个只有2个请求的时间表:
请求1个读取会话 请求2读取会话 请求1写会话 请求2写会话
只有会话数据中的:key-2 =&gt;数据-2