2010-08-22 58 views
186

我正在利用jQuery.ajax(settings)的魔力。

但是,我想知道是否有人玩超時設置很多?

我知道它基本上爲聽寫請求的本地時間,但如果達到超時,它可以觸發任何事情嗎?還是隻是停止收聽迴應?

閱讀jQuery網站,我可以看到沒有參數通過,所以它看起來像一個簡單的設置與一個功能。這很好。

但是,如果達到超時,我想觸發警報或某些功能。在這種情況下,我可以看到錯誤設置沒有被觸發。

這裏是我的片斷:

$("form#testform").submit(function(){ 

var allFormValues = $("form#testform").serialize(); 

    $.ajax({ 
    cache:false, 
    timeout:8000, // I chose 8 secs for kicks 
    type:"POST", 
    url:"someurl.php", 
    data:allFormValues, 
    error:function(){ alert("some error occurred") }, 
    success:function(response){ alert(response); } 
    }); 

}); 

有誰知道如何更與超時工作?

回答

325

如果您的錯誤事件處理程序在超時發生時接受三個參數(xmlhttprequest,textstatus和message),則狀態參數將爲'超時'。

jQuery documentation

第二 參數(除了空)可能的值是 「超時」, 「錯誤」, 「notmodified」 和 「parsererror」。

然後你可以相應地處理你的錯誤。

我創建了這個fiddle,演示了這一點。

$.ajax({ 
    url: "/ajax_json_echo/", 
    type: "GET", 
    dataType: "json", 
    timeout: 1000, 
    success: function(response) { alert(response); }, 
    error: function(xmlhttprequest, textstatus, message) { 
     if(textstatus==="timeout") { 
      alert("got timeout"); 
     } else { 
      alert(textstatus); 
     } 
    } 
});​ 

使用jsFiddle,您可以測試ajax調用 - 它會在響應之前等待2秒鐘。我把超時設置設置爲1秒,所以它應該錯誤並將「超時」textstatus傳回給錯誤處理程序。

希望這會有所幫助!

+2

很高興工作!是的,他們在文檔中隱藏了這些狀態值。 – 2010-08-22 22:42:47

+93

他們在文檔中隱藏了很多。 – Aaron 2012-01-31 14:56:44

+0

爲什麼2秒?你的例子清楚地顯示1000(ms) – 2013-02-19 02:29:36