确定$ .ajax错误是否超时

cof*_*tor 197 ajax jquery connection-timeout

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

});
Run Code Online (Sandbox Code Playgroud)

有谁知道如何使用超时工作更多?

Dav*_*ter 346

如果错误事件处理程序在超时发生时接受三个参数(xmlhttprequest,textstatus和message),则状态arg将为"timeout".

根据jQuery文档:

第二个参数的可能值(除了null)是"timeout","error","notmodified"和"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);
        }
    }
});?
Run Code Online (Sandbox Code Playgroud)

使用jsFiddle,您可以测试ajax调用 - 它将在响应之前等待2秒.我将超时设置设置为1秒,因此它应该出错并将"超时"的textstatus传回错误处理程序.

希望这可以帮助!

  • 他们在文档中隐藏了很多东西. (98认同)
  • @JochemKuijpers Fiddler将等待2秒,因此满足1秒的超时.读.... (4认同)
  • 很高兴它有效!是的,他们在文档中隐藏了这些状态值. (3认同)
  • 你能解释一下x,t,m变量是什么吗? (2认同)
  • (x)mlhttprequest,(t)extstatus和(m)essage (2认同)