In my project, I am loading some js
and css
files by default in index.html
file. But I need to load some other js
/css
files using javascript later (dynamically) and then after those dynamic files are loaded successfully, I need to call a callback function.
I checked jQuery.getScript()
, which is calling callback function after each file is loaded but not all files are loaded.
I tried this:
function loadFiles(payload, callbackFunc) {
var head = document.head || document.getElementsByTagName("head")[0];
var fileref = null;
if (payload.js) {
var js = payload.js;
for (var i = 0; i < js.length; i++) {
var file = this.getPath("files", js[i]);
if (!file.loaded) {
var fileref = document.createElement('script');
fileref.setAttribute("type", "text/javascript");
fileref.setAttribute("src", file.path);
fileref.onreadystatechange = callbackFunc;
fileref.onload = callbackFunc;
head.appendChild(fileref);
file.loaded = true;
}
}
}
if (payload.css) {
var css = payload.css;
for (var i = 0; i < css.length; i++) {
var file = this.getPath("files", css[i]);
if (!file.loaded) {
var fileref = document.createElement('link');
fileref.setAttribute("rel", "stylesheet");
fileref.setAttribute("type", "text/css");
fileref.setAttribute("href", file.path);
fileref.onreadystatechange = callbackFunc;
fileref.onload = callbackFunc;
head.appendChild(fileref);
file.loaded = true;
}
}
}
}
Please someone help me on how to solve this issue.
Answer:
Somehow the below answers didn't work for me. I wasn't able to see the dynamically added scripts in developer tool of chrome. So, I ended up modifying my above code by referring @jfriend00's answer:
function loadFiles(list, fn){
var counter = 0;
var head = document.head || document.getElementsByTagName("head")[0];
for (var i = 0; i < list.length; i++) {
var fileref = document.createElement('script');
fileref.setAttribute("type", "text/javascript");
fileref.setAttribute("src", list[i]);
fileref.onload = function(){
counter++;
if(counter === list.length){
fn();
}
}
head.appendChild(fileref);
}
if(list.length === 0){
fn();
}
}