.getScript()回调用于多种用法

时间:2015-05-15 07:44:22

标签: javascript jquery callback promise

如果我有2个JS文件,例如a.jsb.js

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()

2 个答案:

答案 0 :(得分:1)

您可以通过检查some.js中的功能是否存在来检查您的some.js是否存在

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

<强>更新 您应该将此检查放在ready()的。DOM函数中,如果此检查无效,则可以在准备好的函数中手动加载脚本

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 () { }); 

答案 1 :(得分: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
});

如果脚本&#39; some.js&#39;没有加载,你还应该包括一些错误处理。至少记录错误:

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

此后,在&#34; some.js&#34;中运行脚本的唯一安全方法是使用指定的承诺.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失败(或将失败),则错误处理程序将运行。