加载多个javascript文件-jquery
我使用下面的代码动态加载js脚本加载多个javascript文件-jquery,jquery,Jquery,我使用下面的代码动态加载js脚本 $.getScript("/../../site/js/test.js").done(function(script, textStatus) { console.log("test.js :: " + textStatus ); }); 如果我想在同一段代码中加载多个脚本文件,而不是编写另一个getScript,我该怎么办。。示例test2.js、test3、js我建议使用现有的加载程序框架,而不是编写自己的加载程序框架。看看RequireJS:我
$.getScript("/../../site/js/test.js").done(function(script, textStatus) {
console.log("test.js :: " + textStatus );
});
如果我想在同一段代码中加载多个脚本文件,而不是编写另一个getScript,我该怎么办。。示例test2.js、test3、js我建议使用现有的加载程序框架,而不是编写自己的加载程序框架。看看RequireJS:我建议使用现有的加载程序框架,而不是编写自己的加载程序框架。看看RequireJS:好吧,如果您必须为每个文件编写.getScript,这是一种干净的方法。它还允许构建要加载的文件列表
var脚本=['plugin.js','test.js'];
对于(var i=0;i
如果您必须为每个文件编写.getScript,这是一种干净的方法。它还允许构建要加载的文件列表
var脚本=['plugin.js','test.js'];
对于(var i=0;i
//多个浏览器兼容且不加载同一脚本两次
var filesadded = ""
function loadJSQueue(array, success) {
if (array.length != 0) {
if (filesadded.indexOf("[" + array[0] + "]") == -1) {
filesadded += "[" + array[0] + "]" //List of files added in the form "[filename1],[filename2],etc"
var callbackCalled = false;
oHead = document.getElementsByTagName("head")[0] || document.documentElement;
var oScript = document.createElement('script');
oScript.type = 'text/javascript';
oScript.src = array[0];
array.shift(); // $(oScript).ready(function () { // // }) // oScript.onload = oScript.onreadystatechange = function () { // if (!this.readyState || this.readyState == 'complete') { // // loadJSQueue(array, success); // } // };
var done = false;
// Attach handlers for all browsers
oScript.onload = oScript.onreadystatechange = function () {
if (!done && (!this.readyState ||
this.readyState === "loaded" || this.readyState === "complete")) {
done = true;
// jQuery.handleSuccess(null, xhr, status, data); // jQuery.handleComplete(null, xhr, status, data);
// Handle memory leak in IE
oScript.onload = oScript.onreadystatechange = null;
if (oHead && oScript.parentNode) {
oHead.removeChild(oScript);
}
loadJSQueue(array, success);
}
};
oHead.insertBefore(oScript, oHead.firstChild);
}
else {
array.shift();
loadJSQueue(array, success);
}
}
else {
success();
}
}
// usage:
loadJSQueue(["../../JavaScript/plupload/js/jquery.plupload.queue/jquery.plupload.queue.js",
"../../JavaScript/plupload/js/plupload.js",
"../../JavaScript/plupload/js/plupload.html4.js",
"../../JavaScript/plupload/js/plupload.html5.js"
], function () {
//do your after load stuff here
})
//多浏览器兼容且deoesnt加载同一脚本两次
var filesadded = ""
function loadJSQueue(array, success) {
if (array.length != 0) {
if (filesadded.indexOf("[" + array[0] + "]") == -1) {
filesadded += "[" + array[0] + "]" //List of files added in the form "[filename1],[filename2],etc"
var callbackCalled = false;
oHead = document.getElementsByTagName("head")[0] || document.documentElement;
var oScript = document.createElement('script');
oScript.type = 'text/javascript';
oScript.src = array[0];
array.shift(); // $(oScript).ready(function () { // // }) // oScript.onload = oScript.onreadystatechange = function () { // if (!this.readyState || this.readyState == 'complete') { // // loadJSQueue(array, success); // } // };
var done = false;
// Attach handlers for all browsers
oScript.onload = oScript.onreadystatechange = function () {
if (!done && (!this.readyState ||
this.readyState === "loaded" || this.readyState === "complete")) {
done = true;
// jQuery.handleSuccess(null, xhr, status, data); // jQuery.handleComplete(null, xhr, status, data);
// Handle memory leak in IE
oScript.onload = oScript.onreadystatechange = null;
if (oHead && oScript.parentNode) {
oHead.removeChild(oScript);
}
loadJSQueue(array, success);
}
};
oHead.insertBefore(oScript, oHead.firstChild);
}
else {
array.shift();
loadJSQueue(array, success);
}
}
else {
success();
}
}
// usage:
loadJSQueue(["../../JavaScript/plupload/js/jquery.plupload.queue/jquery.plupload.queue.js",
"../../JavaScript/plupload/js/plupload.js",
"../../JavaScript/plupload/js/plupload.html4.js",
"../../JavaScript/plupload/js/plupload.html5.js"
], function () {
//do your after load stuff here
})
这是异步加载js文件的最佳方式
loadScripts(['script1.js','script2.js'], function(){ alert('scripts loaded'); }
function loadScripts(scripts, callback){
var scripts = scripts || new Array();
var callback = callback || function(){};
for(var i = 0; i < scripts.length; i++){
(function(i) {
$.getScript(scripts[i], function() {
if(i + 1 == scripts.length){
callback();
}
});
})(i);
}
}
loadScripts(['script1.js','script2.js',function(){alert('scripts loaded');}
函数加载脚本(脚本、回调){
var scripts=scripts | | new Array();
var callback=callback | | function(){};
对于(var i=0;i
这是异步加载js文件的最佳方式
loadScripts(['script1.js','script2.js'], function(){ alert('scripts loaded'); }
function loadScripts(scripts, callback){
var scripts = scripts || new Array();
var callback = callback || function(){};
for(var i = 0; i < scripts.length; i++){
(function(i) {
$.getScript(scripts[i], function() {
if(i + 1 == scripts.length){
callback();
}
});
})(i);
}
}
loadScripts(['script1.js','script2.js',function(){alert('scripts loaded');}
函数加载脚本(脚本、回调){
var scripts=scripts | | new Array();
var callback=callback | | function(){};
对于(var i=0;i
我不知道你为什么不能有另一个getScript。有什么具体原因吗?我正要回答你确实需要编写更多的getScript命令,但我想首先问你为什么不想这样做。你只是想减少代码量吗?如果是这样,那么每个脚本只有一个getScript,这就是它的工作方式。我'm动态加载整个页面-$('body')。加载('/bmds/pages/test.html'));-所以我需要添加支持的javascript文件和css…我不知道你为什么不能有另一个getScript。有什么具体原因吗?我正要回答你确实需要编写更多的getScript命令,但我想首先问你为什么不想这样做。你只是想减少代码量吗?如果是的话,那就是1个getScrip我正在动态加载整个页面-$('body')。加载('/bmds/pages/test.html'));-所以我需要添加支持的javascript文件和css…如何确保脚本将按照您调用的顺序加载?第一个脚本可能比第一个脚本需要更长的时间,并且条件i+1==scripts.length不会被更正,如果您循环遍历数组并以键0开始,以1递增,那么您的顺序是正确的吗?因为(i)职能{}(i);它会等到一切都完成后再继续,你试过了吗?嗯,每个$.getScript都是一个单独的异步调用,不是吗?@hamilton.lima,你说得对,i+1==scripts.length只会确保加载最后一个脚本,其他脚本可能仍然很忙……如何确保按照你调用的顺序加载脚本led?第一个可能比第一个需要更长的时间,条件i+1==scripts.length不会被更正。如果您在数组中循环并以键0开始,以1递增,那么您就有了您想要的顺序,对吗?因为(函数(i){})(i);它会等到一切都完成,然后再继续,你试过了吗?嗯,很难让每个$.getScript都是一个单独的异步调用,不是吗?@hamilton.lima,你是对的,i+1==scripts.length只会确保加载最后一个脚本,其他脚本可能仍然很忙……非常感谢,这对处理多个文件非常有帮助。谢谢非常好,它对处理多个文件非常有用。