2013-10-31 39 views
4

这个必须非常简单。外部JavaScript文件包含:

function Hello() { 
    alert('Hello'); 
} 

getScript()版,然后包含函数被调用

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    $.getScript('myscript.js'); 
    Hello(); 
</script> 

我得到:

ReferenceError: Hello is not defined

但如果脚本是在HTML中引用<script>标签按预期工作

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript"></script> 
<script src="myscript.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    Hello(); 
</script> 

我错过了什么?如何引用在getScript() ed脚本中创建的对象?我想使用getScript()来加载ready()事件中的脚本。

+2

你没有等待脚本完成加载。 –

+0

请参阅[手册](http://api.jquery.com/jQuery.getScript/)。这是AJAX。特别注意第二个参数。 – Quentin

+1

'$ .getScript('myscript.js',function(){Hello();});' – melancia

回答

11

问题是$.getScript()函数是异步的。当您之后立即调用Hello()函数时,该脚本尚未加载,因此该函数不可用。

使用常规<script>标签加载脚本会同步发生,因此如果要复制该行为,则必须在Ajax调用中禁用async选项。 getScript本身并不支持这一点,这样你就可以做到这一点使用的$.ajax通话用适当的选项:

$.ajax({ 
    url: 'myscript.js', 
    dataType: 'script' 
    async: false 
}); 

直到脚本加载这将阻止浏览器。

一个更好的方法是使用一个回调,不过,这$.getScript()不支持:

$.getScript('myscript.js', function() { 
    Hello(); 
}); 
+0

都不适合我,有什么想法? http://stackoverflow.com/questions/29014968/jquery-getscript-fails-to-load-function – Viktor

+0

在“dataType:'脚本'”后缺少逗号 – SkyN

4

你需要等待响应:

$.getScript('myscript.js', function(){ 
    Hello(); 
});