当前位置: 首页 > 面试题库 >

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

龚远
2023-03-14
问题内容

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

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

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

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

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

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

(我将jQuery用于Ajax)


问题答案:

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

最主要的是使用$
.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);
   };
});


 类似资料:
  • 问题内容: 我已经看到您可以指定如果ajax请求失败通常要做什么,是否可以让它在某种循环中重试,以便它在停止之前尝试至少x次?我以前使用过此代码: 这将适用于所有AJAX请求(如果我输入错了,请纠正我)。 我想做这样的事情: 这行得通吗?甚至更好:这是正确的方法吗?我会将重试包装在计数系统中,以便不会无限重试。在我的应用程序中,十分之九会正常工作,但是我经常与之交互的API之一有时会返回错误。 任

  • 本文向大家介绍防止重复发送 Ajax 请求,包括了防止重复发送 Ajax 请求的使用技巧和注意事项,需要的朋友参考一下 要考虑并理解 success, complete, error, timeout 这些事件的区别,并注册正确的事件,一旦失误,功能将不再可用; 不可避免地比普通流程要要多注册一个 complete 事件; 恢复状态的代码很容易和不相干的代码混合在一起; 推荐用主动查询状态的方式(

  • 交互过程中,发送请求是第一步。那么,我们将如何构造一个请求呢? 这一章节,我们将一步一步来构建一个 Ajax 请求。学习本节,你将学会: 如何通过 XMLHttpRequest 和 ActiveXObject 来构造一个通用的 xhr 对象。 如何通过 xhr 对象来发送 GET、 POST 等请求。 Content-type 在 Ajax 数据发送中的作用。 那么,接下来让我们进入本节的学习吧。

  • 问题内容: 我在JSF2中使用PrimeFaces。我正在尝试通过将登录名和密码作为Ajax请求发送来对用户进行身份验证。在备用bean的操作方法中,我尝试验证用户,如果验证成功,则重定向到新视图。 使用primefaces可以吗? 因为我认为使用primefaces’ ,所以我只能具有ajax行为或导航。 问题答案: 是的,仅发送重定向而不是(默认)转发作为结果。该稀少JSF 2.0的方式将被追

  • 我正在使用带有ActiveMQ的JMS。我在一台服务器上运行ActiveMQ代理,它创建一个队列和一个消息使用者,用于接收来自其他服务器的消息。如果另一个服务器试图向队列发送消息,但由于某种原因失败(比如服务器之间的网络中断),那么我不希望该服务器重试发送消息。只发送一次,如果失败,不要重试。这在ActiveMQ/JMS中可能吗?javax.JMS.session类有3种确认模式(auto_ack

  • 问题内容: 我正在运行一个基于Symfony 2.8的Web应用程序,该应用程序使用Ajax将一些表单数据发送回控制器。 到目前为止,一切工作正常,但是由于最新的macOS更新至版本10.13.4,用户开始报告,因此提交表单在Safari中不再起作用。10.13.4上的其他macOS版本和其他浏览器仍然可以正常工作,因此在Safari中似乎是一个问题。我当然向苹果提交了错误报告,但我认为我永远不会