我有一個谷歌瀏覽器擴展程序,它在按下按鈕時執行xmlhttp請求到服務器。如果服務器關閉,我正在處理該錯誤。我想實現的是在越來越多的秒數後重試請求。我就這樣做:xmlhttp請求具有奇怪的行爲,並且狀態爲0
var execute = function(method, url, i){
//if timeout doesn't exist, create one
if(!i){
i = 1000;
}
var xmlhttp = new XMLHttpRequest();
xmlhttp.open(method, url, true);
xmlhttp.onreadystatechange = function(){
if (xmlhttp.status != 200) {
// Handle error, retry request
console.log("xmlhttp.status = " + xmlhttp.status + " and xmlhttp.readyState = " + xmlhttp.readyState);
setTimeout("execute('"+method+"', '"+url+"', "+i*2+")", i);
return;
}
};
xmlhttp.send(null);
}
基本上,如果有某種問題,我再次重試請求。如果服務器已啓動,有一點問題都沒有,但如果服務器關閉的JavaScript扔下我一個錯誤說:
PUT http://localhost:3000/buy/2/id=1329664820124
executepopup.html:127
(anonymous function)
這是沒有太大意義,但卻。日誌中的狀態顯示爲「0」,這也非常糟糕。如果在此過程中再次打開服務器,它應該停止這樣做,但如果成功(我在服務器中看到一條日誌告訴我它已收到請求),它會一直調用execute
方法。如果服務器打開,我不知道如何停止這種遞歸。難道我做錯了什麼?這個狀態是否等於零問題?
非常感謝
您在哪裏運行此代碼?在內容中,還是在後臺頁面?什麼是完整的代碼?您是否已經將該域添加到'manifest.json'的'permissions'部分? – 2012-02-19 15:49:05
是的,域被添加,否則它不能與服務器通信,對吧?此代碼在我的擴展的彈出頁面中運行。 – Masiar 2012-02-19 16:14:27