在foreach循环中通过ajax加载内容后执行代码

时间:2013-10-10 13:59:55

标签: javascript jquery ajax

boot_sections = ["123625","113231","11232","113216", ..... ];

for (var k in boot_sections) {
    $.get('/load?sectionId=' + boot_sections[k], function(data) {
        $('#sections').append(data);
    });
}

这是我加载东西的地方。

我需要添加datepicker,lazyload和图片预览,但我需要等到所有请求的加载完成

如何检查所有请求是否已完成?

我试过了:

$('#sections:last-child').ready(function() { /* apply stuff here */ });

但我无法让它发挥作用。

1 个答案:

答案 0 :(得分:3)

嗯......那不是现成的方法,当然它不起作用。您需要使用$.when()

var requestArray = [];

for (var k in boot_sections) {
    requestArray.push($.get('/load?sectionId=' + boot_sections[k], function(data) {
        $('#sections').append(data);
    }));
}

$.when.apply($,requestArray).done(function(){
    // do stuff
})

此外,由于您正在使用数组,因此不应使用for-in循环。 jQuery有一个方法,在给定数组的情况下使这个代码更简单(也适用于对象)

var requestArray = $.map(boot_sections,function(id) {
    return $.get('/load?sectionId=' + id, function(data) {
        $('#sections').append(data);
    });
}

$.when.apply($,requestArray).done(function(){
    // do stuff
})