在我的項目中,我已經連續調用了近400個同步XHR請求。如何處理Javascript中移動設備上丟失的Wi-Fi開關/連接
function executeRequest(url, data){
var requestObj = new XMLHttpRequest();
requestObj.open("POST", url, true);
// prepare the request with some headers
// set some eventHandler e.g. onerror, onreadystatechange, onabort
requestObj.send(data);
}
到目前爲止好。在近97%的案例中,它的效果很好。
有些客戶在android設備上報告錯誤。
POST <網址>網:: ERR_NAME_NOT_RESOLVED
這是我的發現。這是來自Chrome瀏覽器的消息。這指出了DNS問題。
但這令我困惑。該設備可以成功發送和接收例如245請求和246現在有DNS的問題?
它不是任何時候與網:: ERR_NAME_NOT_RESOLVED 有時它請求111其他時間請求358
所以我也很難調查這一問題,因爲結束了相同的請求再現這一點。昨天我發現我可以通過不斷更改WiFi連接來強制這種錯誤。
我有2個不同的網::錯誤
- 網:: ERR_NAME_NOT_RESOLVED
- 網:: ERR_ADDRESS_UNREACHABLE
我得到的都是根據國家哪一個我的移動設備是。
在執行時間從
requestObj.send(data);
如果設備嘗試連接到熱點,比我得到 網:: ERR_NAME_NOT_RESOLVED
如果設備嘗試連接到互聯網,但連接到熱點,比我得到了net :: ERR_ADDRESS_UNREACHABLE
我的知識不太好,DNS和Chrome如何使用它。
我嘗試用錯誤回調來處理這個問題。
我想再次發送此請求。 現在爲我工作的是,我等了幾次(30秒)並再次發送此請求。
function executeRequest(url, data){
var requestObj = new XMLHttpRequest();
requestObj.open("POST", url, true);
// prepare the request with some headers
requestObj.onerror = function(e){
setTimeout(function() {
executeRequest(url, data);
}, 30000);
}
requestObj.send(data);
}
是否有更好的方法來處理這種錯誤? 我不想等30秒。
我還在尋找一些我可以在回調中工作的狀態。
謝謝您的回答。我有一個重試機制。如果我刪除超時我遇到了同一個net ::錯誤,我們之前得到。直到Wi-Fi連接穩定。我在找的東西就像navigator.onLine。 – SancezZ
更新的Ah thnx。你每天學習新的東西 :) – marcokreeft