延迟JQuery Ajax(jqXHR)请求和完成/失败/完成回调
当我使用success callback时,这个解决方案工作得很好,但是当我使用.done()时,这个方法失败了,我如何用原始的.done().fail()和complete()注册的回调重试发送排队的ajax请求延迟JQuery Ajax(jqXHR)请求和完成/失败/完成回调,jquery,ajax,jqxhr,Jquery,Ajax,Jqxhr,当我使用success callback时,这个解决方案工作得很好,但是当我使用.done()时,这个方法失败了,我如何用原始的.done().fail()和complete()注册的回调重试发送排队的ajax请求 var requestQueue = []; $.ajaxSetup({ cache: false, beforeSend: function (jqXHR, options) {
var requestQueue = [];
$.ajaxSetup({
cache: false,
beforeSend: function (jqXHR, options) {
if(true){ //any condition 'true' just demonstrate
requestQueue.push({request:jqXHR,options:options});
//simulate process this queue later for resend the request
window.setTimeout(function(){
//this will work with success callbak option,
//but with .done() the console.log("Well Done!");
// will fail
$.ajax($.extend(requestQueue.pop().options, {global:false, beforeSend:null}));
}, 3000)
return false;
}
}
});
$.ajax({
url:"TesteChanged.html",
error: function(){
console.log("Oh nooooo!");
}
}).done(function(){
console.log("Well Done!");
});
我想将一个ajax调用(基于某个条件)排队等待稍后重新发送,但当重新发送时,必须调用.done()/.fail()原始回调。使用“success”回调选项,这段代码运行良好。我使用它来延迟AJAX请求:
$(document).ajaxSend(function (event, jqxhr, settings) {
var origXhrFunc = settings.xhr;
settings.xhr = function () {
var xhr = origXhrFunc();
var origSend = xhr.send;
xhr.send = function () {
var origArguments = arguments;
setTimeout(function () {
if (xhr.readyState === 1) {
origSend.apply(xhr, origArguments);
}
}, 1000);
};
return xhr;
};
});
全局变量:
var origSend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function () {
var xhr = this;
var origArguments = arguments;
setTimeout(function () {
if (xhr.readyState === 1) {
origSend.apply(xhr, origArguments);
}
}, 1000);
};
仅影响jQuery AJAX请求的变量:
$(document).ajaxSend(function (event, jqxhr, settings) {
var origXhrFunc = settings.xhr;
settings.xhr = function () {
var xhr = origXhrFunc();
var origSend = xhr.send;
xhr.send = function () {
var origArguments = arguments;
setTimeout(function () {
if (xhr.readyState === 1) {
origSend.apply(xhr, origArguments);
}
}, 1000);
};
return xhr;
};
});
在jQuery解决方案中,您可以轻松地将处理程序附加到jqxhr done/fail/progress事件。我使用它来延迟AJAX请求:
$(document).ajaxSend(function (event, jqxhr, settings) {
var origXhrFunc = settings.xhr;
settings.xhr = function () {
var xhr = origXhrFunc();
var origSend = xhr.send;
xhr.send = function () {
var origArguments = arguments;
setTimeout(function () {
if (xhr.readyState === 1) {
origSend.apply(xhr, origArguments);
}
}, 1000);
};
return xhr;
};
});
全局变量:
var origSend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function () {
var xhr = this;
var origArguments = arguments;
setTimeout(function () {
if (xhr.readyState === 1) {
origSend.apply(xhr, origArguments);
}
}, 1000);
};
仅影响jQuery AJAX请求的变量:
$(document).ajaxSend(function (event, jqxhr, settings) {
var origXhrFunc = settings.xhr;
settings.xhr = function () {
var xhr = origXhrFunc();
var origSend = xhr.send;
xhr.send = function () {
var origArguments = arguments;
setTimeout(function () {
if (xhr.readyState === 1) {
origSend.apply(xhr, origArguments);
}
}, 1000);
};
return xhr;
};
});
在jQuery解决方案中,您可以轻松地将处理程序附加到jqxhr done/fail/progress事件。不确定您要问什么,但您可以设置ajax对象的
context
属性,该属性将传递回所有回调。您可以在其中存储任何内容。@JimCote我想将ajax调用(基于某个条件)排入队列以便稍后重新发送,但当重新发送时,必须调用.done()/.fail()原始回调,请尝试执行我的代码。当您使用成功选项时,它可以正常工作,但不能使用.done()。我只使用过ajax对象的success
和complete
属性(与您使用error
的方式相同)。但是jQuery文档不再推荐,错误:,成功:,由于1.8版本,已弃用。不确定您要问什么,但您可以设置ajax对象的上下文
属性,该属性将传递回所有回调。您可以在其中存储任何内容。@JimCote我想将ajax调用(基于某个条件)排入队列以便稍后重新发送,但当重新发送时,必须调用.done()/.fail()原始回调,请尝试执行我的代码。当您使用success选项时,它可以正常工作,但不能与.done()一起工作。我只使用过ajax对象的success
和complete
属性(与您使用error
的方式相同)。但是jQuery文档不再推荐,error:,success:,从1.8版本开始就不推荐使用