ajax请求延迟,重试一个jquery ajax请求,该请求的延迟中附加了回调

我正在尝试实现一个重试由于临时原因而失败的ajax请求的系统。在我的情况下,这是关于重试失败的请求,该请求带有401状态代码,因为会话已过期,然后调用了刷新会话的刷新Web服务。

问题在于成功完成重试后不会调用“完成”回调,这与调用“成功” ajax选项回调不同。我在下面做了一个简单的例子:

$.ajaxSetup({statusCode: {

404: function() {

this.url = '/existent_url';

$.ajax(this);

}

}});

$.ajax({

url: '/inexistent_url',

success: function() { alert('success'); }

})

.done(function() {

alert('done');

});

有没有一种方法可以在成功重试后调用完成样式的回调?我知道延期后“拒绝”后就无法“解决”,是否可以防止拒绝?还是将原始延期的doneList复制到新延期?我没有主意:)

下面是一个更实际的示例,其中我试图将所有被401拒绝的请求排队,并在成功调用/ refresh之后重试它们。

var refreshRequest = null,

waitingRequests = null;

var expiredTokenHandler = function(xhr, textStatus, errorThrown) {

//only the first rejected request will fire up the /refresh call

if(!refreshRequest) {

waitingRequests = $.Deferred();

refreshRequest = $.ajax({

url: '/refresh',

success: function(data) {

// session refreshed, good

refreshRequest = null;

waitingRequests.resolve();

},

error: function(data) {

// session can't be saved

waitingRequests.reject();

alert('Your session has expired. Sorry.');

}

});

}

// put the current request into the waiting queue

(function(request) {

waitingRequests.done(function() {

// retry the request

$.ajax(request);

});

})(this);

}

$.ajaxSetup({statusCode: {

401: expiredTokenHandler

}});

该机制有效,第二次触发401失败的请求,问题是未调用其“完成”回调,因此应用程序停顿了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值