web-dev-qa-db-ja.com

動的な複数の遅延jQueryAjax呼び出し

JQueryのDeferredパターンを使用して http://api.jquery.com/jQuery.when/ 、複数のjsonp ajax呼び出しを行い、結果を待ってから次のステップに進みます。 「.done()」遅延オブジェクトで解決された引数パラメーターの数を設定できるため、一定量の呼び出しを使用してこれを実現できます。しかし、私のアプリケーションでは、呼び出しの数が動的で常に不明であるため、機能しません。

この最初の簡略化された例は、.done()で解決された関数で引数の数を設定できるため機能します。 .when()には2つの呼び出しがあるため、2つ必要です。

$.when( $.ajax( url1 ), $.ajax( url2 ) ).done(function( a1, a2 ) {  
    var data = a1[ 0 ] + a2[ 0 ]; 
});

これは私が必要としているものですが、それを機能させることができません:

var urls = GetUrlList(); // returns array of urls to json service
var requests = []; // hold ajax request
for (i = 0; i < urls.length; i++) {
    requests.Push($.ajax(url[i]));
}

$.when.apply($, requests).done(function ("what goes here?") {
    // Need to get the data returned from all ajax calls here
});

これについて助けてくれてありがとう!

25
Xay Xayay

arguments を使用できます。これは、関数に渡されるすべての引数を保持するオブジェクトの特別な王です。

$.when.apply($, requests).done(function () {
    console.log(arguments); //it is an array like object which can be looped
    var total = 0;
    $.each(arguments, function (i, data) {
        console.log(data); //data is the value returned by each of the ajax requests

        total += data[0]; //if the result of the ajax request is a int value then
    });

    console.log(total)
});
36
Arun P Johny