2014-10-07 129 views
0

我有這個jQuery代碼發送表單提交Ajax請求。我的問題是我不能使用該代碼捕獲超時錯誤。當我自己發送一個500響應時,它正在工作,但如果我得到一個超時,然後在控制檯中看到500,但沒有任何反應,錯誤回調不會執行。相反,我得到:jQuery&Ajax:捕捉500

SyntaxError: syntax error

就行了:

$(document).ready(function(){

下面是完整的代碼:

$(document).ready(function(){ 
    $('body').on('submit', 'form#myForm', function(){ 
     $.ajax({ 
      type: "POST", 
      url: $(this).attr('action'), 
      data: $(this).serialize(), 
      dataType: 'json', 
      success: function(data, textStatus, jqXHR){ 
       alert('success!'); 
      }, 
      error: function(jqXHR, textStatus, errorThrown){ 
       alert('error!'); 
      } 
     }); 
     return false;  
    }); 
}); 
+2

如果刪除dataType:'json',會發生什麼?這聽起來像jquery正在試圖解析一個純文本的超時響應爲JSON。 – 2014-10-07 15:27:30

+0

你釘了它@AndrewLorente謝謝!我應該考慮一下。 – Spir 2014-10-07 15:45:57

回答

1

這可能不是你要找的答案,但你可以設置ajax查詢的超時時間與您的服務器匹配,或稍微少一點,並將其捕獲,然後檢查textStatus。

$.ajax({ 
    type: "POST", 
    url: $(this).attr('action'), 
    data: $(this).serialize(), 
    dataType: 'json', 
    timeout: 3000, //3 Seconds 
    success: function (data, textStatus, jqXHR) { 
     alert('success!'); 
    }, 
    error: function (jqXHR, textStatus, errorThrown) { 
     if (textStatus == 'timeout') { 
      alert('Failed from timeout'); 
      //do something. 
     } 
    } 
}); 
+0

感謝您的幫助。解決方案是刪除像@AndrewLorente建議的數據類型。 – Spir 2014-10-07 15:47:26

1

有趣的是,服務器拋出500和「錯誤」回調沒有被調用。爲了進一步調查這個問題添加一個「完整」的回調Ajax調用和超時值:

$.ajax({ 
     type: "POST", 
     url: $(this).attr('action'), 
     data: $(this).serialize(), 
     dataType: 'json', 
     timeout: 5000, 
     success: function(data, textStatus, jqXHR){ 
      alert('success!'); 
     }, 
     error: function(jqXHR, textStatus, errorThrown){ 
      alert('error!'); 
     }, 
     complete: function(jqXHR, textStatus){ 
      alert(textStatus); // this could be 'timeout' 
     } 
    }); 

完整的回調請求完成後調用; 「成功」和「錯誤」之後。完整回調的textStatus參數將是一個字符串,用於分類請求的狀態(「成功」,「未修改」,「錯誤」,「超時」,「中止」或「parsererror」)。見documentation。這應該給我們一些進一步的信息,說明jquery對請求做了什麼。

+0

服務器的響應主體完全是空的。所以它不能像所描述的那樣被解析爲JSON。那是錯誤的。 Finnaly刪除了這個選項,讓jQuery像@AndrewLorente建議的那樣猜測數據類型。它就像一個魅力。還是要謝謝你的幫助!非常感謝。 – Spir 2014-10-07 15:49:59

+0

這很有道理。那麼我們應該發佈@AndrewLorente的解決方案作爲答案 – Strake 2014-10-07 15:55:16