Jquery 如何加载javascript文件列表并在解释完所有文件后调用回调?

Jquery 如何加载javascript文件列表并在解释完所有文件后调用回调?,jquery,ajax,Jquery,Ajax,jQuery提供了getScript(file,callback)函数,该函数加载脚本文件,对其进行解释,然后调用callback()函数 如果在执行回调之前需要加载多个文件,可以考虑以下解决方案: function loadOrdered(files, callback) { $.getScript(files.shift(), files.length ? function(){loadOrdered(files, callback);} : callbac

jQuery提供了getScript(file,callback)函数,该函数加载脚本文件,对其进行解释,然后调用callback()函数

如果在执行回调之前需要加载多个文件,可以考虑以下解决方案:

function loadOrdered(files, callback) {
   $.getScript(files.shift(), files.length
       ? function(){loadOrdered(files, callback);}
       : callback
   );
}
但是,这会强制以非常特定的顺序加载文件,这意味着浏览器在加载下一个脚本之前必须等待服务器响应。这可能会导致不必要的延迟


如何在不强制浏览器按顺序加载纸条的情况下实现与上述代码相同的效果?

以下是我建议的解决方案:

function loadUnordered(scripts, callback){

var loadCount = scripts.length;

function done(){
    loadCount -=1;
    if (loadCount==0){ 
        callback();
    }
}

for ( var i=0; i<scripts.length; i++){
    $.getScript(scripts[i], done);
}

}
函数装入无序(脚本、回调){
var loadCount=scripts.length;
函数完成(){
载荷计数-=1;
如果(loadCount==0){
回调();
}
}

对于(var i=0;i,以下是我建议的解决方案:

function loadUnordered(scripts, callback){

var loadCount = scripts.length;

function done(){
    loadCount -=1;
    if (loadCount==0){ 
        callback();
    }
}

for ( var i=0; i<scripts.length; i++){
    $.getScript(scripts[i], done);
}

}
函数装入无序(脚本、回调){
var loadCount=scripts.length;
函数完成(){
载荷计数-=1;
如果(loadCount==0){
回调();
}
}

对于(var i=0;i您实际描述了的功能,它似乎就是您所寻找的。

您实际描述了的功能,它似乎就是您所寻找的。

脚本是您完全控制的吗?您的意思是什么?它们是否位于我的服务器上?是的。一种解决方案可能是添加“我完成了”调用到每个.js文件的末尾,并计算调用次数。但当然,如果任何文件是外部的,这将不起作用。脚本是您完全控制的吗?什么意思?它们是否位于我的服务器上?是的。一个解决方案可能是添加“我完成了”"调用每个.js文件的末尾并计算调用次数。但是,当然,如果任何文件是外部的,这将不起作用。我非常喜欢这样做,但我有一个问题:当需要加载的脚本数组仅在运行时确定时,我如何调用head.js?你是对的,我犯了一个错误。但是在这种情况下,我想指定按顺序执行它们是一个问题,或者?据我所知,库在HTML中添加了一个-标记。如果出于某种原因重新解释HTML,这难道不会导致意外行为吗?因为重新解释DOM会导致再次解释脚本。文件在第一次下载时会被缓存,因此如果ml被重新解释,文件将不再加载。未加载(如果浏览器缓存),但它们将被再次调用。如果脚本在按钮上安装侦听器,再次调用脚本将导致侦听器被安装两次。我认为这是一个问题。我非常喜欢这一点,但我有一个问题:当需要加载的脚本数组仅在运行时确定时,如何调用head.js?你是对的,我提出了一个问题错误。但对于我想指定它们执行顺序的情况,这是一个问题,或者?就我所见,库向HTML添加了一个-标记。如果由于某种原因重新解释HTML,这难道不会导致意外行为吗?因为重新解释DOM会导致再次解释脚本。Th第一次下载时会缓存e文件,因此如果重新解释html,则不会再次加载文件。不会加载(如果浏览器缓存),但会再次调用它们。如果脚本在按钮上安装侦听器,再次调用脚本将导致侦听器安装两次。我认为这是一个问题。