私がしようとしているのは、IDを表す整数の束を持つ配列があるということです。私はIDで配列をループします。各idに対して、私はjsonを返すajax呼び出しを行い、次にこのjsonを結果配列に追加します。私はajax呼び出しを行った同じ順序で結果配列の順序を保持したいと思います(つまり、 '/ url/1'、 'url/2'、url/3 ' 、私が呼び出しが行われた順に番号1、2及び3からの結果を格納する結果アレイたい。ここで私は私が持っているものを表示しなければならない一般的なコードである。複数のajax呼び出しを行った後、Javascriptで配列の順序を維持する
var ids = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var results = [];
var counter = 1;
ids.forEach(function(id) {
doAjax('GET', 'url' + id, function(returnValue) {
results.push(returnValue);
if (counter == 10) {
//dispatch some event
}
});
});
問題は、ということです結果配列の順序は、ajax呼び出しの非同期性のために毎回異なります。すべてのajax呼び出しが行われた後も結果の順序が同じになるようにする方法はありますか(つまり、result = [idの結果1、、...] ID 10に起因ID 3から生じる、ID 2に起因?
'forEach'の方法は、第2のパラメータとしてのアイテムのインデックスをとりコールバックを受け付けます。だから、それを作成したIDと同じインデックスに結果を置くことができますか? IE: 'ids.forEach(function(id、index){結果[インデックス] = returnValue})'。 – CRice
現在の実行コンテキストが完了し、JSランタイムがアイドル状態になるまで、AJAX呼び出し結果は使用できません。これは、成功コールバックが実行されるまでにループが終了することを意味します。 –