我正在嘗試在提交時單擊按鈕時對錶單進行連接檢查。這個想法是通過一個超時請求「Timeout()...」,這個代碼還沒有實現,並且繼續迭代Ajax,直到找到連接,有時連接會丟失。當找到連接時,它會提醒用戶,如果在提交後出現連接斷開的情況,將提交成功。以下是我迄今爲止:「錯誤」Ajax超時無法正常工作並且未顯示「超時」狀態
function upload_prepformDiff() {
$.ajax({
type: 'POST',
url: './php/upload_prepform.php',
timeout: 2000, //2 seconds, for testing purposes
data: prepform,
async: false,//Omitted now as of this post
dataType: 'text',
success: function() {
alert("Your Prep form has been submitted.");
window.top.location.replace('./');
},
error: function (xhr, status, error) {
if(status == "timeout") {
alert("Internet connection has been lost! Please wait until you are notified and do not continue.");
} else {
alert(status + " " + error);
}
}
});
};
的問題是,即使是很低的超時值,我沒有得到一個「超時」狀態消息,我得到所以它永遠不會拋出我需要的超時錯誤和我得到的錯誤:錯誤:NETWORK_ERR:XMLHttpRequest異常101
因此,ajax注意到沒有連接,但這是errorThrown顯示,而textStatus是「錯誤「分別爲(xhr,status,error)。所以我TRIED做的是做一點即興和做一些類型的error.indexOf()處理在Ajax中拋出的錯誤字符串,但這並不工作,也沒有error.contains(「NETWORK_ERR」)或任何類型的正則表達式命令。任何改善這個想法或爲什麼我沒有超時?謝謝!
爲什麼要使用'async:false'?另外,你確定錯誤回調是由ajax請求超時觸發的,或者可能是服務器端出現錯誤? –
啊,我發佈前必須改變一些東西,忘記改回來。至於異步假的,我這樣做,是因爲我使用全局變量一樣//全局變量 \t VAR prepform = { \t \t 'cable_no': 「」, \t \t 'prep_date': 「」, \t \t「co_name ':「」},然後遍歷HTML中的這些全局變量(針對prepform中的eID){} {document.getElementById(eID).value;};}} \t \t // alert(prepform [eID] +':'+ document.getElementById(eID).value); \t \t}而async:false只是讓ajax正確啓動以傳遞所有數據的方法。 – jflay
@jflay:沒有理由使用'async:false'。完全可以執行啓用異步的循環。 –