Загрузка нескольких скриптов с помощью $ .getScript () один за другим и выполнение вещи после загрузки всех скриптов
Working Fiddle .Проверьте в окне консоли вывод:
Мы можем создать функцию, которой мы передаем массив путей к файлам js, эта функция будет делать $.getScript()
для первого файла js, а при успешном методе она будет вызывать то же самоефункция, передавая второй индекс файла js, и в случае успеха вызовет ту же функцию, передавая третий индекс файла и так далее, пока не загрузит последний файл.Таким образом, в основном это рекурсивная функция, которая выдает обратный вызов, когда все файлы в массиве загружены. Код завершения будет таким простым:
LoadAllScripts("yourArray",function(){
alert("all scripts loaded!!");
});
Так что полный код будет выглядеть следующим образом.
var LoadAllScripts = function (scriptArray, callback) {
SyncLoadScript({ scriptArray: scriptArray, index: 0}, function () {
callback();
});
};
И SyncLoadScript (core of the logic
) выглядит как
var SyncLoadScript = function (scriptConfig, callback) {
var $this = this;
var script = scriptConfig.scriptArray[scriptConfig.index];
if (scriptConfig.scriptArray.length > scriptConfig.index) {
if (script.trim().length > 0) {
$.getScript(script, function () {
console.log(script);
SyncLoadScript({ scriptArray: scriptConfig.scriptArray, index: ++scriptConfig.index, element: scriptConfig.element }, callback);
}).fail(function (jqXHR, textStatus, errorThrown) {
console.log(script + " failed while loading");
debugger;
console.log("Error: "+errorThrown);
SyncLoadScript({ scriptArray: scriptConfig.scriptArray, index: ++scriptConfig.index, element: scriptConfig.element }, callback);
});
}
else {
console.log("invalid script src!!");
}
}
else {
callback();
}
}
Затем вы можете сделать простой вызов LoadAllScripts, передав массив пути к файлу js.как показано ниже.
LoadAllScripts(["1.js","2.js","3.js","4.js"], function () {
console.log("All the scripts have been loaded.");
//do your stuff after all the scripts are loaded.
});
Примечание: Я дал вам пустые обратные вызовы для вас, ребята, чтобы настроить и передать любые данные по вашему выбору.probably to hold all the failed scripts that you can passback to the main function and try to reload them again
.