12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- /*
- * 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));
|