2013-10-27 16 views
22

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

この最初の簡単な例は、.done()解決関数内のargsの数を設定できるので機能します。

$.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 
}); 

おかげで私は.whenで2つのコールが()があるので、私は2を必要と知っていますこの!

答えて

30

あなたは関数に働く

$.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) 
}); 
+0

感謝を渡されたすべての引数を保持しているオブジェクトの特別な王である、argumentsを使用することができます! –

+0

これは少なくとも2つの送信要求がある場合にうまく機能します。それ以外の場合は、1つのクエリまたはいくつかの場合、矛盾した動作が発生します。( – Happynoff

+0

引数へのリンクが古く、推奨されない機能を指しています[更新されたリンクはこちら](https://developer.mozilla.org/en- – Liam

関連する問題