2012-11-05 30 views
0

我不得不通过脚本标签插入,像这样在页面上的JavaScript文件(initial.js)一个js文件加载一个js文件异步:从负载异步

<script src="initial.js"></script> 

此文件创建DOM元素(让说两个链接),并通过jQuery ajax方法异步加载另一个jQuery插件(plugin.js)。点击这两个链接可以从jQuery插件(plugin.js)中获取一个模块。

然后,JavaScript文件(initial.js)被修改为通过jQuery ajax而不是通过脚本标记在页面上异步加载。这导致一些事件间歇性地没有附加到链接上,这导致插件不被调用。

我相信浏览器正在按自己的顺序加载异步脚本,因此链接无法间歇性地启动插件。用这个新设置解决这个问题的任何指针?

+0

如果插件已经从'initial.js'异步加载,加载顺序应该没有问题。我想这是那些剧本的内容 - 你能向我们展示吗? – Bergi

回答

0

在一个高层次,我认为你需要看看require.js之类的东西。或者,您可以查看一些jQuery事件处理代码,它允许您监听调用的加载事件,这可以帮助您确定在加载下一个脚本之前何时加载一个脚本。

0

你可能已经尝试过这样的事情在过去的:

var output; 
$.get('data.php',function(data){ 
    output=data; 
}); 
alert(output); 

,你会得到一个未定义的错误,因为JavaScript不周围等待AJAX​​调用移动到下一个代码前归还。

脚本也是一样。如果您将多个调用放到多个脚本中,您可能会得到最小的一个返回最快,并执行该脚本。如果加载10kb脚本,然后是1kb脚本,那么1kb脚本可能会返回最快的脚本,然后在10kb脚本之后调用该脚本。

为了解决这个问题,你可以做一个排队系统,然后只加载每个脚本之后,先前已加载:

var scripts=['script1.js','script2.js','script3.js']; 

$(document).ready(function(){ 
    loadScript(); 
}); 

function loadScript(){ 
    if(sendQueue.length==0) 
     return; 
    $.getScript(scripts[0],function(){ 
     scripts=scripts.slice(1); 
     loadScript(); 
    }); 
} 

但如果你是从加载脚本中的脚本从脚本中...一开始就像,那么这仍然可能无法正常工作。