异步加载js但同步执行

时间:2014-05-28 10:11:22

标签: javascript jquery html html5

情景是我有很多js文件。根据不同的平台调用不同的文件。 所以我有一个问题,因为我想异步加载文件。但是这些文件的执行应该同步完成。目前我正在进行此函数调用

  function loadScriptJs(src) {   
     Console.log(' Call to file '+src);
     var file = document.createElement('script'),
            head = document.getElementsByTagName('head')[0];
    file.type = 'text/javascript';
    file.setAttribute("defer","defer");
    file.setAttribute("src",src);
    head.appendChild(file);
        file.onload = function() {            
              console.log(src + " is loaded.");
        };
  }

现在我有一个数组,其中包含一个被调用的js文件列表。我遍历数组并为每个src调用此函数。 我在每个js文件中都使用了document.ready函数。在这里,我检查了文件的依赖关系,并对序列进行了优化。即依赖文件稍后加载(稍后在数组中加载),而类似于Parent的文件会更早出现。

示例: - 如果我有文件A1,B2,C3,D4,E5 ......就像明智一样。我的数组是[' js / A1.js',' js / B2.js',' js / C3.js' ...]。当我通过循环运行它。 我得到了调用文件[文件名]'是与数组中相同的序列,但加载了“[filename]的控制台'没有达到预期的顺序。

是的我无法通过互联网控制加载。但我希望执行是同步的。即在最后一个文件完成加载时开始执行所有文件。

任何人都可以向我提供任何建议,建议或想法。

1 个答案:

答案 0 :(得分:1)

动态插入的脚本可能不符合403属性。 defer个代码具有script属性。默认情况下,这是真的。明确地将其设置为false。

async

或以纯HTML格式

file.setAttribute("async", "false");

您可能还需要删除每个脚本中的<script type="text/javascript" async=false src="A1.js"></script> 方法并在顶层启动脚本的逻辑,将每个JS脚本附加到document.ready标记的底部而不是标题。如果多个脚本在它被触发之前注册了就绪事件,那么你不知道它们将被调用的顺序。