我的网站上发生了多个异步AJAX请求。我想要做的是将每个请求成功回调到队列中并按顺序执行它们。我该怎么做?
我查看了this或this等插件,但它们似乎只是按顺序放置了AJAX请求,而不是它们的回调。
我尝试使用jQuery中的.queue(),但我无法执行第二个队列。这是jsFiddle。
var q = $({});
$.ajax({
url: 'test'
})
.done(function () {
q.queue(function () {
alert('You should always see this message first.');
});
});
$.ajax({
url: 'test'
})
.done(function () {
q.queue(function () {
alert('And this next.');
});
});
答案 0 :(得分:4)
您可以使用when
:
var req1 = $.ajax({
url: 'test'
})
.done(function () {
alert('You should always see this message first.');
});
var req2 = $.ajax({
url: 'test'
});
$.when(req1, req2)
.done(function () {
alert('And this next.');
});
或者像这样:
var req1 = $.ajax({
url: 'test'
})
.done(function () {
alert('You should always see this message first.');
});
var req2 = $.ajax({
url: 'test'
})
.done(function () {
$.when(req1).done(function(){
alert('And this next.');
});
});
如果你有很多请求,你可以用数组和函数来概括这一点。
未经测试的通用解决方案
var requests = [];
function queueCallback(deferred, callback){
requests.push(deferred);
$.when.apply(null, requests).then(callback);
}
然后就会像这样使用:
queueCallback($.ajax(...), function(){ /* callback */});