检测一组延迟的ajax请求何时完成加载,并且页面也已使用jQuery完成加载

时间:2014-02-22 11:50:26

标签: jquery ajax onload jquery-deferred

我可以使用jQuery检测何时完成延迟的AJAX请求数组,并且可以检测页面何时使用jQuery加载。

但我似乎无法同时发现两者。

这就是我所拥有的:

$(function () {
    var getscriptlist = ['js/libs/handlebars.js', 'js/libs/ember.js', 'js/libs/prefixfree.js'];
    var deferreds = [];
    for (var i = 0; i < getscriptlist.length; i++) {
        deferreds.push($.getScript(getscriptlist[i]));
    }
    $.when.apply($, deferreds).then(function () {
    });
});

但是我想在页面开始加载之前运行AJAX请求,然后我想在文档加载时触发一些东西。

我目前的问题是页面加载,而AJAX将花费太长时间,因为它只在页面加载后才开始运行。如果我以相反的方式切换它(以便触发请求,当它们完成并且页面已加载),那么AJAX请求可能需要太长时间,并且会延迟页面上脚本的执行,这会绑定在页面完成加载时运行的$(function内部。

有任何帮助吗?感谢。

1 个答案:

答案 0 :(得分:1)

我想有很多方法可以做到这一点。这是一个:

$(function () {
    var getscriptlist = ['js/libs/handlebars.js', 'js/libs/ember.js', 'js/libs/prefixfree.js'];
    var deferreds = [ $.Deferred() ];//<<<<<< start the array with a special Deferred 
    $(window).on('load', deferreds[0].resolve);//<<<<<< resolve the special Deferred when the page has loaded
    for (var i = 0; i < getscriptlist.length; i++) {
        deferreds.push($.getScript(getscriptlist[i]));
    }
    $.when.apply($, deferreds).then(function () {
        //code here will run when all Deferreds/promises in the array become resolved.
    });
});