jQuery脚本加载队列

时间:2012-11-20 18:03:04

标签: jquery scripting loading external

所以这个问题是我最近提出的另一个问题的分支,这更像是一种好奇心。

我的另一个问题涉及在外部js库中动态加载。在我的例子中,我使用了jQuery模板导入,然后是Knockout.js,两者都使用.getScript()。每次完成加载后,我都会发出警报,以确保它们正确加载。

这是我正在使用的近似代码(似乎在jsFiddle上按顺序工作,所以它以前可能是我的代码。问题仍然存在。):

$.getScript("https://raw.github.com/jquery/jquery-tmpl/master/jquery.tmpl.js", function(){ alert('tmpl finished loading!'); });
$.getScript("http://cloud.github.com/downloads/SteveSanderson/knockout/knockout-2.2.0.js", function(){ alert('Knockout finished loading!'); });

我发现当我加载页面时,Knockout的警报在tmpl库之前触发,即使它被列在第二位。

我的假设是,他们会以队列的方式同步加载,等待前一个完成,然后加载下一个。看来事实并非如此。

所以我要求验证这个假设,并解释为什么这是/不是这样的。我还想知道是否有另一个[更好]的方法来排队脚本加载,这样我就不会因为依赖未加载的脚本而遇到未定义的问题。

2 个答案:

答案 0 :(得分:2)

你的测试显然与你的假设相矛盾。没有队列,它们各自同时运行。哪一个首先完成取决于文件大小,网络时间等。

如果要确保一个接一个地加载,请调用加载第一个库的回调函数中的第二个库:

$.getScript("https://raw.github.com/jquery/jquery-tmpl/master/jquery.tmpl.js", function(){
    alert('tmpl finished loading!');
    $.getScript("http://cloud.github.com/downloads/SteveSanderson/knockout/knockout-2.2.0.js", function(){ 
        alert('Knockout finished loading!');
    });
});

答案 1 :(得分:0)

您可以按照要加载它们的顺序在单个js文件中创建所有库。这减少了需要作为额外奖励的请求数量!