2015-05-15 3 views
0

Если у меня есть 2 JS файлы, такие как a.js и b.js.getScript() обратного вызова для многократного использования

a.js

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

В файле b.js, я буду называть функции некоторых некоторые.js, но как узнать, что какой-нибудь .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() метод Присвоенный от Promise:

$.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 
    } 

Update: Вы должны поместить этот чек в. 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() { }); 
+0

Если нет? как выполнить run 'somefunction' – l2aelba

+0

Ok m, обновляющий ответ – Tushar

Смежные вопросы