【问题标题】:when there is timeout at jQuery ajax, I want to run a function [duplicate]当jQuery ajax超时时,我想运行一个函数[重复]
【发布时间】:2012-10-12 04:14:51
【问题描述】:

可能重复:
jquery $.ajax timeout setting

超时有效,但是当超时发生时,我想执行一个函数。你有什么想法吗?

$.ajax({
    type: "GET", 
    url: "xajax.php", 
    timeout: 100, 
    data: "name=John&location=Boston", 
    success: function(msg) {
        alert( "Data Saved: " + msg );
    }
});

【问题讨论】:

  • fyi,你不应该使用字符串作为data,而是使用对象:data: {name: 'John', location: 'Boston'}

标签: jquery


【解决方案1】:

使用完整:

请求完成时调用的函数(成功后 错误回调被执行)。该函数传递了两个参数: jqXHR(在 jQuery 1.4.x 中,XMLHTTPRequest)对象和一个字符串 对请求的状态进行分类(“成功”、“未修改”、 “错误”、“超时”、“中止”或“解析错误”)。从 jQuery 1.5 开始, 完整的设置可以接受一系列函数。每个功能都会 被依次调用。这是一个 Ajax 事件。

或错误:

请求失败时调用的函数。函数接收 三个参数:jqXHR(在 jQuery 1.4.x 中,XMLHttpRequest)对象,一个 描述发生的错误类型和可选的字符串 异常对象,如果发生。第二个可能的值 参数(除了 null)是 "timeout"、"error"、"abort" 和 “解析器错误”。当发生 HTTP 错误时,errorThrown 会收到 HTTP 状态的文本部分,例如“未找到”或“内部” 服务器错误。”从 jQuery 1.5 开始,错误设置可以接受一个数组 的功能。每个函数都会被依次调用。注意:这个处理程序 跨域脚本和 JSONP 请求不调用。这是一 Ajax 事件。

这里是一个使用完整的例子:

    $.ajax({ 
    type: "GET", 
    url: "xajax.php", 
    timeout: 100, 
    data: "name=John&location=Boston", 
    success: function(msg){ alert( "Data Saved: " + msg ); },
    complete: function(jqXHR, textStatus) { 
        if (textStatus == "timeout") {
           alert('timeout');
        }
    }
    });

【讨论】:

    【解决方案2】:

    看看complete函数

    http://api.jquery.com/jQuery.ajax/

    完成(jqXHR,文本状态) 请求完成时要调用的函数(在执行成功和错误回调之后)。该函数传递了两个参数:jqXHR(在 jQuery 1.4.x 中,XMLHTTPRequest)对象和一个对请求状态进行分类的字符串(“成功”、“未修改”、“错误”、“超时”、“中止”或“解析器错误”)。从 jQuery 1.5 开始,完整的设置可以接受一个函数数组。每个函数都会被依次调用。这是一个 Ajax 事件。

    $.ajax({ 
       type: "GET", 
       url: "xajax.php", 
       timeout: 100, 
       data: "name=John&location=Boston",
       success: function(msg){ alert( "Data Saved: " + msg ); }, 
       complete: function(jqXHR, textStatus) {
            if (textStatus === "timeout") {
                alert("timeout");
            }
       }
    

    【讨论】:

    • 我确实像个孩子一样尝试过 :) 但它不起作用!... timeout: function(){alert("timeout!!!");}......... .i 尝试错误:function(x,t,m){alert(t);}...它不起作用。因为它不是 JSON 数据类型!
    【解决方案3】:

    超时将作为错误的一部分抛出,您可以检查错误原因是否为超时并在那里调用您的函数!

    错误处理程序的三个参数是 xmlhttprequest、textstatus 和 message。 发生超时时,状态 arg 将为“超时”。

    $.ajax({
        type: "GET", 
        url: "xajax.php", 
        timeout: 100, 
        data: "name=John&location=Boston", 
        success: function(msg){ alert( "Data Saved: " + msg ); }
        error: function(xmlhttprequest, textstatus, message) {
            if(textstatus==="timeout") {
                alert("Timeout happened"); //run function here!
            } else {
                alert(textstatus);
            }
        }
    });​
    

    textstatus 的可能值是(忽略 null)“timeout”、“error”、“notmodified”和“parsererror”。

    相关文档位于http://api.jquery.com/jQuery.ajax/

    【讨论】:

    • +1。不过,文档的链接会很好。
    猜你喜欢
    • 1970-01-01
    • 2016-09-24
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 2017-07-07
    相关资源
    最近更新 更多