注册JavaScript文件和依赖的内联代码

时间:2010-10-25 16:45:56

标签: javascript jquery ajax

我有两个数组。

  1. 我使用$ .getScript(url)注册的JavaScript文件的网址列表;
  2. 要注册$(“html”)的内联JavaScript命令列表.adndnd(内联)
  3. (2)中的任何项目可能取决于(1)中的任何项目。这意味着我必须确保(1)中的所有项目在注册任何(2)之前已完成加载。

    我想异步加载所有(1)...因为它会更快,但如何在注册(2)之前确保所有这些进程都已完成?

3 个答案:

答案 0 :(得分:1)

我认为这应该有效:

var scripts = [
  {"src": "script1", "loaded": false},
  {"src": "script2", "loaded": false},
  {"src": "script3", "loaded": false},
]
var commands = ["cmd1","cmd2","cmd3"];

for (var i = 0, l = scripts.length; i<l; i++){
  (function (script){
    $.ajax({
      url: script.src,
      dataType: 'script',
      success: function (){

        for (var k = scripts.length; k--;){
          if (scripts[k].src === script.src){
            scripts[k].loaded = true;
          }
        }

        var allReady = true;
        for (var k = scripts.length; k--;){
          if (!scripts[k].loaded){
            allReady = false;
          }
        }
        if (allReady){
          /*execute your inline commands*/
        }
      }
    });
  })(scripts[i]);
}

答案 1 :(得分:1)

在我看来,这应该可以通过jQuery的回调容量来解决;请参阅简洁的使用说明here,希望这会有所帮助。

编辑:这是实际的代码:

$.extend({myFunc : function(someArg, callbackFnk){
// load files here
var data = 'test';

// now call function for inline loading
if(typeof callbackFnk == 'function'){
  callbackFnk.call(this, data);
}}});

$.myFunc(someArg, function(arg){ */here goes inline load*/ });

答案 2 :(得分:0)

你可以在ajax调用的成功处理程序中添加(2)。