Cargando varias secuencias de comandos por $ .getScript() uno tras otro y hacer cosas después de que todos los scripts se cargan
Working Fiddle. Compruebe la ventana de la consola para la salida
Podemos crear una función a la que pasemos un conjunto de rutas de archivos js, esta función hará un $.getScript()
para el primer archivo js y en el método de éxito llamará a la misma función pasando el segundo índice de archivo js, y este en éxito llamará a la misma función al pasar el índice del tercer archivo y así sucesivamente hasta que cargue el último archivo. Así que es básicamente una función de recursividad que dará una devolución de llamada cuando todos los archivos de la matriz ha sido loaded.The código final sería tan simple como
LoadAllScripts("yourArray",function(){
alert("all scripts loaded!!");
});
así que el código completo sería algo así.
var LoadAllScripts = function (scriptArray, callback) {
SyncLoadScript({ scriptArray: scriptArray, index: 0}, function() {
callback();
});
};
Y SyncLoadScript (core of the logic
) parece
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();
}
}
entonces usted puede hacer una simple llamada a LoadAllScripts pasando array de ruta del archivo js. como abajo.
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.
});
Nota: he dado devoluciones de llamada vacías para ustedes para hacer ajustes y pasar alrededor de cualquier dato de elección. probably to hold all the failed scripts that you can passback to the main function and try to reload them again
.
Estoy muy interesado en las respuestas aquí. Parece que hay algunas buenas opciones: el método .getScript() de jQuery o cualquiera de las bibliotecas mencionadas (LABjs, HEADjs, etc.). ¡Gracias, amigos! – Chris