2015-05-15 75 views
0

如果我有2個JS文件一樣a.jsb.js.getScript()回調多使用

a.js

$.getScript('some.js',function(){ 
    //Call some function in some.js 
}); 

在文件b.js,我會請一些功能some.js,但是如何知道some.js被加載?

我可以這樣做。(在b.js

SomejsIsLoaded.then(function(){ 
    //Call some function in some.js 
}); 

.then().promise()

+0

a.js和b.js如何加載? –

回答

1

$.getScript()下去返回一個jqXHR承諾,該承諾可以分配給以後使用。

你可以寫......

var somejsPromise = $.getScript('some.js', function() { 
    //Call some function in some.js 
}); 

...但它最好不要使用全局命名空間,所以你可以使用jQuery的命名空間:

$.somejsPromise = $.getScript('some.js', function() { 
    //Call some function in some.js 
}); 

如果腳本「 some.js'不加載,你還應該包含一些錯誤處理。最起碼,記錄錯誤:

$.somejsPromise = $.getScript('some.js', function() { 
    //Call some function in some.js 
}).then(null, function(error) { 
    console.log('getScript(some.js)', error); 
}); 

此後,唯一安全的方法來運行「some.js」發的腳本,是使用分配承諾的.then()方法:

$.somejsPromise.then(function() { 
    //Call some function in some.js 
}, function() { 
    //handle the case that some.js fails to load. 
}); 

如果some.js已加載,則回調將立即運行。

如果some.js尚未加載,則回調將排隊,並在加載some.js時運行。

如果some.js失敗(或將失敗),那麼錯誤處理程序將運行。

1

您可以檢查您some.js是否存在由some.js檢查功能的存在與否

if (typeof sumefunction!= 'undefined') { 
     //your code 
    } 

更新: 你應該把這個檢查的。您DOMready()功能,如果這個檢查否定了,那麼你可以手動加載腳本在你準備功能

var head = document.getElementsByTagName('head')[0]; 
var script = document.createElement('script'); 
script.type = 'text/javascript'; 
script.src = your script location; 
head.appendChild(script); 

,或者你可以用getScript()或與jQuery的.load()功能

$('script').load(function() { }); 
+0

如果不是?如何執行'somefunction' – l2aelba

+0

好的更新答案 – Tushar