2015-04-02 44 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

相關問題