确定 $.ajax 错误是不是超时

Posted

技术标签:

【中文标题】确定 $.ajax 错误是不是超时【英文标题】:Determine if $.ajax error is a timeout确定 $.ajax 错误是否超时 【发布时间】:2011-04-02 09:39:51 【问题描述】:

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

但是,我想知道是否有人经常使用超时设置?

我知道它基本上是用于指示请求的本地时间,但是如果达到超时,它会触发任何事情吗?或者它只是停止监听响应?

阅读 jQuery 站点,我可以看到没有传递任何参数,因此这似乎是一个具有一种功能的简单设置。这很好。

但是,如果达到超时,我想触发警报或某些功能。在这种情况下,我可以看到错误设置没有被触发。

这是我的 sn-p:

$("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】:

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

根据jQuery documentation:

第二个可能的值 参数(除了 null)是“超时”, “错误”、“未修改”和 “解析器错误”。

您可以相应地处理您的错误。

我创建了这个 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 秒,因此它应该会出错并将“超时”的文本状态返回给错误处理程序。

希望这会有所帮助!

【讨论】:

很高兴它成功了!是的,他们在文档中隐藏了这些状态值。 他们在文档中隐藏了很多内容。 @JochemKuijpers Fiddler 将等待 2 秒,因此满足 1 秒的超时。阅读...... 你能解释一下 x、t、m 变量是什么吗? (x)mlhttprequest、(t)extstatus 和 (m)essage

以上是关于确定 $.ajax 错误是不是超时的主要内容,如果未能解决你的问题,请参考以下文章

确定 $.ajax 错误是不是超时

$.ajax 实用程序中的 JQuery 错误选项

Laravel 5.0 ajax 消息提交返回错误或超时

Tapestry 应用程序中的会话超时 AJAX 错误

jQuery - 拦截所有Ajax请求(统一处理超时返回结果错误状态码 )

如何通过ajax上传文件而不会超时?