0

私は JS/JQuery の初心者です。コードは次のとおりです。

ids = ["1", "2", "3"]
var imageData = [];
for (i=0; i<ids.length; i++) {
    $.ajax({
        url: 'http://my.images.edu/' + ids[i] + '/info.json',
        type: 'GET',
        dataType: 'jsonp',
        success: function(data) {
            imageData.push(data);
        }
    });
};
// now I want to do stuff with in a loop with the populated 
// array, but it's always empty!
console.log(imageData.length);

JSONP が機能しています (関数内のコンソールに JSON オブジェクトの応答を記録できますsuccess)。この質問に基づく私の推測では、配列を使用したいときにまだ値が設定されていませんが、間違っている可能性があります。その場合、どうすればそれを回避できますか? そうでない場合、何が欠けていますか? 前もって感謝します!

4

1 に答える 1

0

imageData は、現在の関数コンテキストが実行を完了するまで編集されません。

コードが最後まで実行され、成功のコールバックが 1 つずつ実行されます。コールバック内に配置されたデータを処理するロジックが必要です。

これは、操作を実行する前にすべてのコールバックを実際に完了する必要があるように見えるため、おそらく jQueryの deferedsを調べる必要があります。

これらの線に沿った何かがループで機能しています。

$('#button').click(function() {
    $.when(
        $.ajax({
            url: '/echo/html/',
            success: function(data) {
                alert('request complete')
            }
        }),
        $.ajax({
            url: '/echo/html/',
            success: function(data) {
                alert('request complete')
            }
        })
    ).then( function(){
        alert('all complete');
    });
});
于 2013-03-13T01:05:50.993 に答える