我有2個不同的XMLHttpRequest對同一Web服務發出異步請求的對象。 Web服務在HTTP響應頭文件中發回一個cookie,我可以用chrome.cookies.read擴展名讀取(請求是跨域的)。響應cookie和2個使用chrome.cookies擴展的異步xmlhttp請求
每個xhr按名稱讀取相同的cookie,但每個響應後cookie的值將不同,因爲它是每個請求者的唯一標記。
因此,我希望在接收到HTTP響應之後,爲每個請求存儲每個cookie值,以備後用。
因此,這裏是我的代碼目前正在做:
var my_cookie_value = [] ;
function begin()
{
for (var i = 0 ; i < 2 ; i ++)
{
sendRequest(some_url, i);
}
}
function sendRequest(some_url, thread)
{
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
readCookie(thread) ;
}
}
xmlhttp.open("GET", some_url, true);
xmlhttp.send();
}
function readCookie(thread)
{
chrome.cookies.get(
{
"url" : some_domain,
"name" : "mycookie"
},
function(cookie)
{
if (cookie != null)
{
my_cookie_value[thread] = cookie.value ;
}
}
);
}
但是因爲chrome.cookies.read使用回調函數沒有保證的時間火,我發現Cookie值搞混(或反覆),即使它們是作爲不同的值從服務器返回的。
我想可能發生的是:
線程0發出請求
線程1發送請求
線程0接收響應
線程0請求cookie值回調
Arrgghh !! 。最糟糕的情況即將出現...
線程1收到迴應
線程1所請求的cookie值回調
線程0的cookie回調火災和cookie值(線程1)被複制到my_cookie_value [0]
線程1周的cookie回調火災和cookie值(線程1)被複制到my_cookie_value [1]
這顯然不是我想要的。 my_cookie_value [0]和[1]都包含線程1的標記。
因此,最後問題:是否有另一種解決方案呢?我無法重寫服務器代碼,我只能訪問客戶端。
我想知道爲什麼哦,爲什麼要讀取一個由回調函數完成的cookie?
可能沒有其他解決辦法,比讓xhr調用同步... – serg 2011-03-23 16:21:32