2

Web サイトで複数の非同期 AJAX リクエストが発生しています。私がやりたいことは、これらの各リクエストの成功コールバックをキューに入れて、順番に実行することです。どうすればいいですか?

thisまたはthisのようなプラグインを見ましたが、それらは AJAX リクエストを順番に配置しているだけで、コールバックはしていないようです。

jQuery から.queue()を使用しようとしましたが、実行する 2 番目のキューを取得できませんでした。ここに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.');
    });
});
4

1 に答える 1

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 */});
于 2013-06-09T04:36:53.633 に答える