确定$ .ajax错误是否超时

时间:2010-08-22 22:17:30

标签: jquery ajax 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); }
   });

});

有人知道如何使用超时工作吗?

1 个答案:

答案 0 :(得分:342)

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

根据jQuery documentation

  

第二个可能的值   参数(除了null)是“超时”,   “错误”,“未修改”和   “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传回错误处理程序。

希望这有帮助!