Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态加载的jQuery偶尔抛出jQuery是未定义的错误_Jquery_Dynamic - Fatal编程技术网

动态加载的jQuery偶尔抛出jQuery是未定义的错误

动态加载的jQuery偶尔抛出jQuery是未定义的错误,jquery,dynamic,Jquery,Dynamic,我们有动态加载的jQuery。这是因为我们有没有母版页的遗留代码,当我们决定开始使用jQuery时,所有这些遗留代码都已经引用了一个公共js文件。因此,我们没有添加对数百个文件的引用,而是更新了现有文件以执行以下操作: function loadjscssfile(filename) { var fileref = document.createElement('script') fileref.setAttribute("type", "text/javascript")

我们有动态加载的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"); 
函数加载JSCSSFILE(文件名){
var fileref=document.createElement('脚本')
fileref.setAttribute(“类型”、“文本/javascript”)
fileref.setAttribute(“src”,文件名)
if(fileref的类型!=“未定义”)
document.getElementsByTagName(“head”)[0]。appendChild(fileref)
}
函数getRelPath(){
对于(var t=“”,n=0,n=0;n
现在我们已经准备好了,偶尔会出现“jQuery未定义”错误,通常来自jQuery.formatCurrency.js。当我们没有得到那个错误时,jQuery工作得很好,当我们得到这个错误时,它根本不工作。这在同一个浏览器(IE10)中时不时出现。由于动态代码以正确的顺序加载jquery-1.10.1.js~和~jquery.formatCurrency.js,因此我认为代码必须先成功上载前者,然后再上载后者


我们还更新了IIS,以关闭jQuery所在的JavaScript文件夹上的动态和静态内容压缩,因为我在某个地方读到了可能导致此问题的内容。我清除了所有缓存,但仍然存在问题。

您正在异步加载脚本,因此无法保证它们将按所需顺序加载。因此,您应该添加回调功能,以确保在下一次开始之前脚本已完成加载

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");
    });
});
函数加载JSCSSFILE(文件名,回调){
var fileref=document.createElement('script');
fileref.onreadystatechange=fileref.onload=function(){
var state=fileref.readyState;
如果(!callback.done&(!state | | |/loaded | complete/.test(state))){
callback.done=true;
回调();
}
};
setAttribute(“类型”、“文本/javascript”);
fileref.setAttribute(“src”,文件名);
if(typeof fileref!=“未定义”)document.getElementsByTagName(“head”)[0].appendChild(fileref);
}
函数getRelPath(){
对于(var t=“”,n=0,n=0;n
为什么不等到您确定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);

您需要使用回调。您正在异步加载脚本,因此无法保证它们将按要求的顺序加载。谢谢Kevin,我如何使用回调?你能举个例子吗?啊,我明白了!!谢谢你,凯文。我现在将着手解决此问题。:)通过一个调整,
if(callback!=undefined&&!callback.done&(!state | | |/loaded | complete/.test(state))
非常感谢-这让我发疯了。我会投你一票,但我显然还没有足够的声誉