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

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.

Answers:

Answer

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

Answer

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

Tags

Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.