如何在订单中执行ajax成功回调?

时间:2013-06-09 04:16:40

标签: jquery ajax

我的网站上发生了多个异步AJAX请求。我想要做的是将每个请求成功回调到队列中并按顺序执行它们。我该怎么做?

我查看了thisthis等插件,但它们似乎只是按顺序放置了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.');
    });
});

1 个答案:

答案 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 */});