我正在使用预过滤器重做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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐