Globally configure all $.ajax requests to support

2019-03-02 09:04发布

I need a way to set some kind of timeout function globally with $.ajaxSetup that will allow my Phonegap application to keep retrying an ajax GET or POST every time there is a timeout due to a bad internet connection.

I use Backbone.js so most jquery plugins won't work for this, I would some help writing one global piece of code which will handle retries.

Thank you.

2条回答
我命由我不由天
2楼-- · 2019-03-02 09:48

You can use jQuery.ajaxSetup(options).

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

Example

$.ajaxSetup({
  timeout: TimeoutValue
});

Apart from that if you want perform call again on timeout, I will suggest you to create wrapper for ajax call like.

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)
}

And Use the function just like $.ajax

查看更多
我命由我不由天
3楼-- · 2019-03-02 09:51

Found a solution to make all AJAX calls work with a retry timeout.

$(document).ajaxError(function (e, xhr, options) {
    if(xhr.status == 0){
        setTimeout(function(){
            console.log('timeout, retry');
            $.ajax(options);
        }, 5000);
    }
});
查看更多
登录 后发表回答