2013-06-27 39 views
0

我正在嘗試在提交時單擊按鈕時對錶單進行連接檢查。這個想法是通過一個超時請求「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」)或任何類型的正則表達式命令。任何改善這個想法或爲什麼我沒有超時?謝謝!

+1

爲什麼要使用'async:false'?另外,你確定錯誤回調是由ajax請求超時觸發的,或者可能是服務器端出現錯誤? –

+0

啊,我發佈前必須改變一些東西,忘記改回來。至於異步假的,我這樣做,是因爲我使用全局變量一樣//全局變量 \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

+1

@jflay:沒有理由使用'async:false'。完全可以執行啓用異步的循環。 –

回答

1

想這可能是有點晚了你,但無論如何...

如果已經異步指定爲「假」,則超時屬性將被忽略。

至於處理錯誤,您可以訪問較早的SO問題: status of ajax or post request

希望這有助於! :)