关于javascript:全局配置所有$ .ajax请求以支持超时重试

Globally configure all $.ajax requests to support retry on timeout

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

我使用Backbone.js所以大多数jquery插件都不适用于此,我会帮助编写一个将处理重试的全局代码。

谢谢。


您可以使用jQuery.ajaxSetup(选项)。

Set default values for future Ajax requests. Its use is not recommended.

1
2
3
$.ajaxSetup({
  timeout: TimeoutValue
});

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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类似的功能


找到一个解决方案,使所有AJAX调用都能在重试超时时工作。

1
2
3
4
5
6
7
8
$(document).ajaxError(function (e, xhr, options) {
    if(xhr.status == 0){
        setTimeout(function(){
            console.log('timeout, retry');
            $.ajax(options);
        }, 5000);
    }
});