/* * jquery.ajax-retry * https://github.com/johnkpaul/jquery-ajax-retry * * Copyright (c) 2012 John Paul * Licensed under the MIT license. */ (function($) { // enhance all ajax requests with our retry API $.ajaxPrefilter(function(options, originalOptions, jqXHR){ jqXHR.retry = function(opts){ if(opts.timeout){ this.timeout = opts.timeout; } return this.pipe(null, pipeFailRetry(this, opts.times)); }; }); // generates a fail pipe function that will retry `jqXHR` `times` more times function pipeFailRetry(jqXHR, times){ // takes failure data as input, returns a new deferred return function(input, status, msg){ var ajaxOptions = this; var output = new $.Deferred(); // whenever we do make this request, pipe its output to our deferred function nextRequest() { $.ajax(ajaxOptions) .retry({times:times-1}) .pipe(output.resolve, output.reject); } if(times > 1){ // time to make that next request... if(jqXHR.timeout !== undefined){ setTimeout(nextRequest, jqXHR.timeout); } else { nextRequest(); } } else { // no times left, reject our deferred with the current arguments output.rejectWith(this, arguments); } return output; }; } }(jQuery));