javascript - 使用带有后文档就绪回调的 Jquery 异步获取多个脚本的正确方法

标签 javascript jquery asynchronous

我计划在页面加载时从我的服务器异步获取多个 JS 文件。我知道 Jquery 函数“getScript”,但这只会获取 1 个脚本。当从服务器获取一批脚本时,有什么方法可以指定要执行的回调吗?

我想过做这样的事情:

$.getScript(script1, function() {
$.getScript(script2, function() {
$.getScript(script3, function() {
...
...
});});....});

但这会按顺序加载脚本,我希望并行完成请求。

作为取代这个问题的更一般的问题,加载 N 种资源(CSS、图像、脚本等)的最佳方式是什么?异步指定要在加载所有资源时执行的单个回调?

更新:除此之外,我还需要在文档准备就绪后执行回调(由 $(document).ready 事件发出信号)。有什么方法可以实现吗?

最佳答案

您需要连续调用 getScript 3 次,传递一个递增计数器的回调,如果计数器为 3,则调用真正的回调。

您可以制作一个简单的包装函数来执行此操作:

function getScripts(names, callback) {
    var received = 0;
    var realCallback = function() { 
        received++;
        if (received === names.length)
            $(callback);
    };

    for (var i = 0; i < names.length; i++)
        $.getScript(names[i], realCallback);
}

(编辑为在文档准备好时调用回调)

你可以这样调用它:

getScripts([ "script1", "script2", "script3" ], function() { ... });

关于javascript - 使用带有后文档就绪回调的 Jquery 异步获取多个脚本的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3763154/

相关文章:

javascript - 验证不适用于所有字段

javascript - 无法更新 JavaScript 全局变量

javascript - jQuery 隐藏 Widget Style 的元素 ul li

java - 从 Servlet 启动独立应用程序的线程

javascript - react redux 异步操作

javascript - 刷新时更改配色方案

javascript - Jquery slider 循环

javascript - 无法在 ng-repeat 中动态 ng-include angular 模板

javascript - 重新加载本地 jqGrid,行数据比以前少——没有看到行消失?

python - Celery 异步任务和定期任务一起使用