小编典典

如何重新发送失败的Ajax请求?

ajax

我有多个Ajax请求每分钟都有一些请求数据,而其他请求是由用户通过ui发起的。

$.get('/myurl', data).done(function( data ){
   // do stuff..
});

该请求可能由于身份验证失败而失败。我设置了一个全局.ajaxError()方法来捕获任何失败的请求。

$(document).ajaxError(function( e, jqxhr ){
   // Correct error..
});

发现错误后,我将重置授权。重置授权是可行的,但是用户必须手动重新启动ajax调用(通过ui)。

如何使用最初发送的jqxhr重新发送失败的请求?

(我将jQuery用于Ajax)


阅读 591

收藏
2020-07-26

共1个答案

小编典典

发现此帖子表明可以很好地解决此问题。

最主要的是使用$
.ajaxPrefilter
并将您的错误处理程序替换为一个自定义的错误处理程序,该程序将检查重试并使用闭包的’originalOptions’执行重试。

我发布代码是为了防止将来将来离线。同样,信用归原始作者所有

// register AJAX prefilter : options, original options
$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {

   originalOptions._error = originalOptions.error;

   // overwrite error handler for current request
   options.error = function( _jqXHR, _textStatus, _errorThrown ){

   if (... it should not retry ...){

         if( originalOptions._error ) originalOptions._error( _jqXHR, _textStatus, _errorThrown );
         return;
      };

      // else... Call AJAX again with original options
      $.ajax( originalOptions);
   };
});
2020-07-26