3

for ループ ステートメントがあり、各ループは ajax 呼び出しを実行します。

$.each(arr, function(i, v) {
    var url = '/xml.php?id=' + v;
    $.ajax({
        url: url,
        type: 'GET',
        dataType: 'xml',
        success: function(xml) {
            if ($(xml).find('Lists').attr('total') == 1) {
                // some code here
            }
        },
        complete: function() {
            // some code here
        }
    })
})

ループの下ですべてのajax 呼び出しが完了した後にコードを実行したいのですが、以下のコードを最後の行に配置しようとしましたが、ajax 呼び出しが完了したときに実行されません

    if (i == arr.length - 1) {
        // some code here
    }

したがって、10回のループがある場合、10回のajax呼び出しがあります。10回のajax呼び出しが完了した後にコードを実行したいのですが、アイデアはありますか?

使用する方が良いですか、.ajaxComplete()それとも.done()達成する方が良いですか?

ありがとう

4

2 に答える 2

13

$.when()を使用してみてください

var arr = [];
$.each(arr, function(i, v) {
    var url = '/xml.php?id=' + v;
    var xhr = $.ajax({
        url: url,
        type: 'GET',
        dataType: 'xml',
        success: function(xml) {
            if ($(xml).find('Lists').attr('total') == 1) {
                // some code here
            }
        },
        complete: function() {
            // some code here
        }
    });
    arr.push(xhr);
})

$.when.apply($, arr).then(function(){
    console.log('do')
})
于 2013-06-06T07:30:06.453 に答える