2013-10-31 40 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(); 
});