我们有动态加载的jQuery。这是因为我们有遗留代码没有母版页,当我们决定开始使用jQuery时,所有这些遗留代码都已经引用了一个公共的js文件。因此,我们不是添加对数百个文件的引用,而是更新现有文件以执行以下操作:
function loadjscssfile(filename) {
var fileref = document.createElement('script')
fileref.setAttribute("type", "text/javascript")
fileref.setAttribute("src", filename)
if (typeof fileref != "undefined")
document.getElementsByTagName("head")[0].appendChild(fileref)
}
function getRelPath() {
for (var t = "", n = 0, n = 0; n < document.location.pathname.split("/").length - 3; n++) t += "../";
return (t)
}
loadjscssfile(getRelPath() + "JavaScript/jquery-1.10.1.js");
loadjscssfile(getRelPath() + "JavaScript/jquery.formatCurrency.js");
loadjscssfile(getRelPath() + "DataValidationFunctions2.js");
现在我们已经实现了这一点,我们偶尔会得到“jQuery is undefined”错误,通常来自jquery.formatCurrency.js。当我们没有得到那个错误时,jQuery工作正常,当我们这样做时,它根本不起作用。这是从同一个浏览器(IE10)零星到下一个零星的零星。由于动态代码以正确的顺序加载jquery-1.10.1.js~和~jquery.formatCurrency.js,我认为代码必须在后者之前成功上载前者。
我们还更新了IIS以关闭jQuery所在的JavaScript文件夹上的动态和静态内容压缩,因为我在某处可能会导致此问题。我清除了所有缓存,仍然有问题。
答案 0 :(得分:0)
您正在异步加载脚本,因此无法保证它们将按所需顺序加载。因此,您应该添加回调功能,以便确保脚本在下一次开始之前已完成加载。
function loadjscssfile(filename, callback) {
var fileref = document.createElement('script');
fileref.onreadystatechange = fileref.onload = function () {
var state = fileref.readyState;
if (!callback.done && (!state || /loaded|complete/.test(state))) {
callback.done = true;
callback();
}
};
fileref.setAttribute("type", "text/javascript");
fileref.setAttribute("src", filename);
if (typeof fileref != "undefined") document.getElementsByTagName("head")[0].appendChild(fileref);
}
function getRelPath() {
for (var t = "", n = 0, n = 0; n < document.location.pathname.split("/").length - 3; n++) t += "../";
return (t)
}
loadjscssfile(getRelPath() + "JavaScript/jquery-1.10.1.js",function(){
loadjscssfile(getRelPath() + "JavaScript/jquery.formatCurrency.js",function(){
loadjscssfile(getRelPath() + "DataValidationFunctions2.js");
});
});
答案 1 :(得分:0)
为什么不等到你确定加载了jQuery,例如
loadjscssfile(getRelPath() + "JavaScript/jquery-1.10.1.js");
setTimeout(function() {
if (jQuery === undefined) {
console.log("jQuery not loaded. Checking again.")
setTimeout(arguments.callee, 40);
return;
}
console.log("jQuery is loaded. Continue");
// Code that depends on jQuery
loadjscssfile(getRelPath() + "JavaScript/jquery.formatCurrency.js");
loadjscssfile(getRelPath() + "DataValidationFunctions2.js");
}, 40);