ajax请求超时重试,超时后重试ajax请求

我正在使用预过滤器重做ajax请求2次,请参阅下面的代码。超时后重试ajax请求

然而,问题在于也调用了ajax请求的原始fail()处理程序。当然,这需要被禁用。

$.ajaxPrefilter(function(options, originalOptions, jqXHR) {

// retry not set or less than 2 : retry not requested

if (!originalOptions.retryMax || !originalOptions.retryMax >= 2) {

return;

}

// no timeout was setup

if (!originalOptions.timeout > 0) {

return;

}

if (originalOptions.retryCount) {

originalOptions.retryCount++;

} else {

originalOptions.retryCount = 1;

// save the original error callback for later

if (originalOptions.error) {

originalOptions._error = originalOptions.error;

}

};

// overwrite *current request* error callback

options.error = $.noop();

// setup our own deferred object to also support promises that are only invoked

// once all of the retry attempts have been exhausted

var dfd = $.Deferred();

jqXHR.done(dfd.resolve);

// if the request fails, do something else yet still resolve

jqXHR.fail(function() {

var args = Array.prototype.slice.call(arguments);

if (originalOptions.retryCount >= originalOptions.retryMax || jqXHR.statusText !== "timeout") {

// add our _error callback to our promise object

if (originalOptions._error) {

dfd.fail(originalOptions._error);

}

dfd.rejectWith(jqXHR, args);

} else {

$.ajax(originalOptions).then(dfd.resolve, dfd.reject);

}

});

});

我的要求是:我得到的消息的console.log“我们在失败”的同时请求是重做首次。任何想法如何解决这个问题?

$.ajax({

url: url,

crossDomain: true,

dataType: "json",

type: type,

timeout: 20000,

async: (async === undefined ? true : async),

beforeSend: beforeSend,

retryMax: (type == "POST" ? 0 : 2),

data: data

}).done(function(response, status, xhr) {

}).fail(function(xhr, textStatus, error) {

console.log("WE ARE IN FAIL");

});

2014-04-25

Wesley

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值