4

この問題に非常に苦労してい$.when()ますが、(複数の AJAX ステートメントで) そのように使用して、すべてが終了したときに約束できることを知っています。

http://jsfiddle.net/M93MQ/

    $.when(
        $.ajax({ url: '/echo/html/', success: function(data) {
            alert('request 1 complete')
          }
        }),

        $.ajax({ url: '/echo/html/', success: function(data) {
            alert('request 2 complete')
          }
        })
    ).then( function () { alert('all complete'); });

しかし、これは raw でのみ機能します。関数呼び出し$.ajax()でこれと同じ機能を持ち、その内部に ajax (およびその他のランダムロジック) を持つ方法はありますか?

擬似コードのアイデア:

    // The functions having the AJAX inside them of course
    $.when(ajaxFunctionOne, ajaxFunctionTwo).then(function () {
        alert('all complete'); 
    });
4

1 に答える 1

6

もちろん、関数にpromiseオブジェクトを返してもらいます。

function ajaxFunctionOne() {
    return $.ajax(...)
}
function ajaxFunctionTwo() {
    var dfd = $.Deferred();
    // on some async condition such as dom ready:
    $(dfd.resolve);
    return dfd.promise();
}

function ajaxFunctionThree() {
    // two ajax, one that depends on another
    return $.ajax(...).then(function(){
        return $.ajax(...);
    });
}   

$.when(ajaxFunctionOne(),ajaxFunctionTwo(),ajaxFunctionThree()).done(function(){
    alert("all complete")
});
于 2013-01-31T21:16:42.017 に答える