JS在多个.load() - 函数完成后继续

时间:2017-04-12 10:20:33

标签: javascript ajax asynchronous load jquery-deferred

我遇到了异步JS函数的问题。好吧,我有一个逐个插入元素的功能。这有效。但是我希望在所有.load() - 函数完成后继续。

我实施Deferred()部分的方式显然是错误的,但我不知道如何实现这一点。

注意:为了更清晰,我简化了代码。

var d = new jQuery.Deferred();
var i = index;
function loadView() {
    if(i > -1 && i < array.length) {
        if(!jQuery.contains(document.documentElement, $(selector)[0])) {
            /* do stuff here */
            panel.load(myPHPfile, function() {
                $dom.append($(selector));
                i++;
                if(i < array.length) {
                    loadView();
                    d.resolve();
                }
            });
        }
    }
}
loadView();

jQuery.when(d).then(function() {
    /* when all elements are insert, do something */
});

我感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

如果递增后i < array.length,则意味着您没有完成,因此您不希望在那里解决您的延迟。代替:

if(i < array.length) {
    loadView();
} else {                   // ***
    d.resolve();
}

另外,您不需要使用jQuery.when。只是:

d.then(function() {
    /* when all elements are insert, do something */
});