【问题标题】:Globally configure all $.ajax requests to support retry on timeout全局配置所有 $.ajax 请求以支持超时重试
【发布时间】:2014-08-27 09:52:13
【问题描述】:

我需要一种使用 $.ajaxSetup 全局设置某种超时功能的方法,这将允许我的 Phonegap 应用程序在每次因互联网连接不良而超时时继续重试 ajax GET 或 POST。

我使用 Backbone.js,所以大多数 jquery 插件都不能解决这个问题,我会帮助编写一段处理重试的全局代码。

谢谢。

【问题讨论】:

标签: javascript jquery ajax cordova backbone.js


【解决方案1】:

您可以使用jQuery.ajaxSetup(options)

为未来的 Ajax 请求设置默认值。不推荐使用它。

例子

$.ajaxSetup({
  timeout: TimeoutValue
});

除此之外,如果您想在超时时再次执行调用,我建议您为 ajax 调用创建包装器。

function myAjax(options){
    var myOptions = {
        timeout: TimeoutValue,
        error: function( jqXHR, textStatus, errorThrown) {
            //textStatus can one of these "timeout", "error", "abort", and "parsererror"
            if(textStatus === "timeout") {
                //Recall method once again
                myAjax(options)
            }
        }           
    };

    options = $.extend(true, myOptions , options);
    $.ajax(options)
}

并像$.ajax一样使用函数

【讨论】:

  • 嗨 Satpal,这是一个很好的答案,但我需要一个全局函数来处理我的所有应用程序调用,这就是为什么我希望仅使用 $.ajaxSetup 完成某种函数。
【解决方案2】:

找到了一个解决方案,可以让所有 AJAX 调用在重试超时的情况下工作。

$(document).ajaxError(function (e, xhr, options) {
    if(xhr.status == 0){
        setTimeout(function(){
            console.log('timeout, retry');
            $.ajax(options);
        }, 5000);
    }
});

【讨论】:

    猜你喜欢
    • 2019-05-20
    • 2013-01-09
    • 1970-01-01
    • 2013-01-14
    • 2017-10-30
    • 2011-01-14
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    相关资源
    最近更新 更多