すべてのコールバック関数が終了するのを待ってから、次のように最終結果を返したいです。
var jsonArray = new Array();
for(var i = 0; i < 10; i++)
{
jQueryFunction(i, function(json){
jsonArray[i] = json;
});
}
return jsonArray;
jQueryFunction は非同期 ajax とコールバックを含む関数で、json と呼ばれる値を返します。for ループが終了するのを待ってから、すべての戻り値を jsonArray に入れ、最後に返します。
私の目標は、すべての jQueryFunction コールバックが終了するのを待って、戻り値を jsonArray に格納し、最後に jsonArray を返すことです。jsonArray をすぐに返し、for ループを待たないため、以前の目標は機能しません。
私はこのように試しました:
function jQueryFunction(ptd_url, callback)
{
$.ajax
({
type: "GET",
async: true,
url: ptd_url,
dataType: "jsonp",
jsonp: "callback",
jsonpCallback: "tpsHandler",
success: function(json)
{
return callback(json);
}
});
}
function finalResultFunction()
{
var jsonArray = new Array();
for(var i = 0; i < 10; i++)
{
jQueryFunction(1, function(json){
jsonArray[i] = json;
alert(jsonArray[i]);
});
}
$.when.apply($, jsonArray).done(function(){
alert(jsonArray[0]);
...
}
setInterval(finalResultFunction,1000);
最初のアラートでは正しいオブジェクトが表示されますが、2 番目のアラートではまだ null が表示されます。なんで?修正方法は?