js怎么引用另一个js文件 需求可能比较诡异。就是引用一个a.js文件里会引用另一个b.js文件,而且要求被引用的b.js文件中的代码先执行,然后再执行a.js余下的代码。因为需要执行的js比较多,之间有一些依赖关系,人肉整理太麻烦了。目测用异步的东东是可以弄的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这样可以按顺序加载loadScript("file1.js", function(){loadScript("file2.js", function(){loadScript("file3.js", function(){alert("All files are loaded!");});});});function loadScript(url, callback){var script = document.createElement ("script")script.type = "text/javascript";if (script.readyState){ //IEscript.onreadystatechange = function(){if (script.readyState == "loaded" || script.readyState == "complete"){script.onreadystatechange = null;callback();}};} else { //Othersscript.onload = function(){callback();};}script.src = url;document.getElementsByTagName_r("head")[0].appendChild(script);} 非常感谢,我明白你的意思了,不过刚才测了下似乎有点不大对,能看下吗?我一共有4个js文件1引用2-1和2-2,2-1和2-2都引用3//1.jsalert('1begin');loadScript("2-1.js", function(){loadScript("2-2.js", function(){alert("1end");});});//2-1.jsalert("2-1begin");loadScript("3.js", function(){alert("2-1end");});//2-2.jsalert("2-2begin");loadScript("3.js", function(){alert("2-2end");});//3.jsalert(3);输出是//Chrome231begin2-1begin32-1end2-2begin1end32-2end1end应该是最后输出的才对吧。 这样就对了,你加载完最后一个就不要callback()了 if (script.readyState) { //IE script.onreadystatechange = function() { if (script.readyState == "loaded" || script.readyState == "complete") { script.onreadystatechange = null; callback(); } }; } else { //Others script.onload = function() { callback(); }; }看上面代码,意思说加载完“2-1.js”就callback()加载“2-2.js”,这时候“2-1.js”加载完了应该就运行,那就会弹出3。那加载“2-2.js”完成了,那又不是要运行callback()?这时候的就应该会运行alert("1end"),而“2-2.js”加载完运行了。 有无研究过AMD规范?,比较流行的有Requirejs和Seajs,都挺成熟了。 对不起,我只是个JS新手,没研究过。RequireJS试了下,似乎也和前面一样,加载顺序正确,执行顺序不太一致 在加载顺序的基础上,你还要自己指定回调保证执行顺序。如果依赖逻辑过多造成回调层次过深,你还可以试试老赵的Windjs,用同步思维写异步代码 注册验证的问题 ,急等! 如何让用户在点击历史记录时重新到服务器上重新获取网页 元素的定位问题 如何实现在客户端画图的功能 js 防止用户输入~ 用js遍历2.0中的TreeView控件出现的问题 帮帮我啊……csdn的朋友们 textarea 换行的问题, 请教大侠 怎样类似smart qq在最小化窗口了还能有信息提示,或者在切换到其他Tab页面也有提示 csdn“隐藏菜单”的问题? 这个js该怎么写 在网页中嵌入excel文档
loadScript("file2.js", function(){
loadScript("file3.js", function(){
alert("All files are loaded!");
});
});
});
function loadScript(url, callback){
var script = document.createElement ("script")
script.type = "text/javascript";
if (script.readyState){ //IE
script.onreadystatechange = function(){
if (script.readyState == "loaded" || script.readyState == "complete"){
script.onreadystatechange = null;
callback();
}
};
} else { //Others
script.onload = function(){
callback();
};
}
script.src = url;
document.getElementsByTagName_r("head")[0].appendChild(script);
}
非常感谢,我明白你的意思了,不过刚才测了下似乎有点不大对,能看下吗?
我一共有4个js文件1引用2-1和2-2,2-1和2-2都引用3//1.js
alert('1begin');
loadScript("2-1.js", function(){
loadScript("2-2.js", function(){
alert("1end");
});
});
//2-1.js
alert("2-1begin");
loadScript("3.js", function(){
alert("2-1end");
});
//2-2.js
alert("2-2begin");
loadScript("3.js", function(){
alert("2-2end");
});
//3.js
alert(3);输出是//Chrome23
1begin
2-1begin
3
2-1end
2-2begin
1end
3
2-2end1end应该是最后输出的才对吧。
if (script.readyState) { //IE
script.onreadystatechange = function() {
if (script.readyState == "loaded" || script.readyState == "complete") {
script.onreadystatechange = null;
callback();
}
};
} else { //Others
script.onload = function() {
callback();
};
}看上面代码,意思说加载完“2-1.js”就callback()加载“2-2.js”,这时候“2-1.js”加载完了应该就运行,那就会弹出3。那加载“2-2.js”完成了,那又不是要运行callback()?这时候的就应该会运行alert("1end"),而“2-2.js”加载完运行了。
对不起,我只是个JS新手,没研究过。RequireJS试了下,似乎也和前面一样,加载顺序正确,执行顺序不太一致