1

我正在处理的项目有很多 javascript 和 css 文件。我正在使用一个公司库,它通过使用类似 require("relative file name") 来处理资源文件的加载。但是对于某些页面,我不想使用这个库,而是想使用普通的 jQuery。我不能使用脚本或样式标签来加载我的 javascript(因为我的内容在 iframe 中并且位于其他一些带有代理的页面中 - 所以所有 url 都是在运行时计算的)。我只能使用 jQuery 和 Javascript 来加载这些文件。

现在我知道我可以使用

$.getScript( <myFileURL>, function( data, textStatus, jqxhr ) {
                  console.log( "Load was performed." );
                  if(jqxhr.status = 200){
                      //call another resource file?
                  }               
            });

唯一的问题是,启动这么多异步调用来加载资源 javascript 文件似乎有点过头了。除非加载所有资源文件,否则处理无法继续。有没有其他方法可以一次加载所有资源文件,然后只在加载后继续页面。

编辑:试过这个 -

$.when($.getScript( <file1URL>),
               $.getScript( <file2URL>)).then(function(){
                customeFunction();// breakpoint here never gets hits.
          });

当我检查网络选项卡时 - 我可以看到文件已成功下载。但是 customFunction() 函数永远不会被调用。谢谢

4

1 回答 1

4

$.getScript返回一个promise object,所以你可以这样做:

$.when($.getScript( "file1.js"),
       $.getScript( "file2.js"),
       $.getScript( "file3.js")).then(function(){
     //Your code.
});

这些请求将在不等待前一个完成的情况下启动。加载所有脚本后,then将调用处理程序。

或者,如果您有一组文件名:

files = ["one.js", "two.js", "three.js"];
promises = $.map(files, function(file){
    return $.getScript(file.valueOf());
});
$.when.apply($, promises).then(function(){});
于 2013-09-17T21:39:22.280 回答