尽管脚本已加载,但未定义jQuery

时间:2018-08-16 17:56:21

标签: javascript jquery

我知道这个话题已经被大量讨论,但是我似乎没有找到解决方案。

我尝试在回调中加载多个库,如下所示:

var loadjQuery = function (){
    console.log('loadjQuery');
    try {
        jQuery();
        loadLocalStorage();
    } catch(e) {
        var jq = document.createElement('script');
        jq.type = 'text/javascript';
        jq.src = '//myurl/assets/js/lib/jquery-2.1.1.js';
        jq.onload = function (){ $.noConflict();};
        document.getElementsByTagName('head')[0].appendChild(jq);
        try {
            jQuery();
            loadLocalStorage();
        } catch (e) {
            jq.src = '//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js';
            jq.onload = function (){ $.noConflict();};
            document.getElementsByTagName('head')[0].appendChild(jq);
            loadLocalStorage();
        }

    }   
}
var loadCookie = function (){
    console.log('loadCookie');
    try { 
        jQuery.cookie();
    } catch(e) { 
        var cook = document.createElement('script'); 
        cook.type = 'text/javascript';
        cook.src = '//myurl/assets/js/lib/jquery.cookie.js';
        document.getElementsByTagName('head')[0].appendChild(cook); 
    }
}
var loadLocalStorage = function (){
    console.log('loadLocalStorage');
    try { 
        jQuery.localStorage();
        loadCookie();
    } catch(e) { 
        var ls = document.createElement('script'); 
        ls.type = 'text/javascript';
        ls.src = '//myurl/assets/js/lib/jquery.storage.js';
        document.getElementsByTagName('head')[0].appendChild(ls);
        loadCookie();
    }
}

loadjQuery ();

文件全部加载到网络whit 200响应中。代码也会被加载。 但是当我尝试使用代码时,我得到了:

jQuery is not defined

例如,如果我转到文件jquery.storage.js中的错误,则会在此行得到错误:

}(jQuery, window, document));

我仔细研究了这个问题的所有答案。将脚本放在页眉和页脚中。设置defer =“ defer”等'...我想念什么?

1 个答案:

答案 0 :(得分:0)

好吧,这太愚蠢了。 因为js异步工作,所以尽管所有脚本都以正确的顺序加载,并且我可以在控制台中使用jQuery,并且在文档准备就绪后,库仍未初始化,因为此时尚未加载jQuery。

诀窍是在onload函数中添加回调,如下所示:

var loadjQuery = function (){
    console.log('loadjQuery');
    try {
        jQuery();
        loadLocalStorage();
    } catch(e) {
        var jq = document.createElement('script');
        jq.type = 'text/javascript';
        jq.onload = function (){ 
        $.noConflict();
        loadLocalStorage();
        loadCookie();
        };
        jq.src = '//myurl/assets/js/lib/jquery-2.1.1.js';
        document.getElementsByTagName('head')[0].appendChild(jq);   
    }   

}