确定$ .ajax错误是否超时


205

我正在利用的魔力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); }
   });

});

有谁知道如何更多地处理超时?

Answers:


356

如果您的错误事件处理程序在发生超时时采用三个参数(xmlhttprequest,textstatus和message),则状态arg将为“超时”。

根据jQuery文档

第二个参数(除null外)的可能值为“超时”,“错误”,“未修改”和“ parsererror”。

然后,您可以相应地处理错误。

我创建了这个小提琴来演示这一点。

$.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秒,因此它应该出错,并将'timeout'的文本状态传递回错误处理程序。

希望这可以帮助!


3
很高兴它有效!是的,它们有点隐藏文档中的状态值。
David Hoerster,2010年

102
它们在文档中隐藏了很多内容。
亚伦

4
@JochemKuijpers Fiddler将等待2秒,因此满足了1秒的超时。阅读....
Rickjaah 2013年

2
您能解释一下x,t,m var是什么吗?
巴特

3
(x)mlhttprequest,(t)extstatus和(m)essage
JupiterP5 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.