如果jquery无法加载,如何停止进一步的javascript调用?

时间:2014-02-06 15:10:25

标签: javascript jquery document-ready

我正在尝试处理JQuery而不是加载。

(这是一个javascript api,开发人员经常使用它忘记包含jquery,因此我想告诉他们缺少什么)

  1. 我在document.ready上运行的各种文件中有一堆代码 e.g。
  2. (function ($, undefined) {
        //stuff 
    })( jQuery );
    

    如果未加载JQuery,则上面的代码会中断。 我发现的一种解决方法是通过函数添加对Jquery的检查 e.g。

    (function ($, undefined) {
       //stuff
     })( JQueryCheck() );
    
    function JQueryCheck() {
        if (window.jQuery == undefined)
            alert("no jquery");
        else
            return jQuery;
    }
    

    我不确定这是否足够强大,如果有更好的方法可以让我知道。

    1. 除此之外,我想阻止其他document.readys运行,因为所有依赖于JQuery的加载都没有意义。
    2. 这一定是常见问题,但我很难找到解决方案。

4 个答案:

答案 0 :(得分:3)

不要在Html中加载像<script src="some-path"></script>这样的脚本文件

而是这样做:

if(window.jQuery){
  $.getScript('path to js file');
}

这将检查jquery,如果它存在,则加载脚本并执行它。

答案 1 :(得分:2)

试试这个:

function JQueryCheck() {
    return !!jQuery;
}

或者:

function JQueryCheck() {
    try{
        jQuery();
    } catch(e){
        if(e){
            return false;
        } else {
            return true;
        }
    }
}

或者:

function JQueryCheck() {
    if(window.jQuery){
        return true;
    }else{
        return false;
    }
}
祝你好运!

答案 2 :(得分:1)

虽然最好解决您遇到的问题但不加载它会做您想要的事情:

if(window.jQuery) {
    //jQuery Code
}

或者,如果您在加载本地文件后如果托管的文件失败,则可以这样做:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/jquery.min.js"><\/script>')</script>

答案 3 :(得分:1)

您的代码应该可以正常工作,但您可以稍微简化一下:

(function ($, undefined) {
    if(!$) {
        return alert("no jquery");
    }

    //stuff 
})(window.jQuery);

您也可以在未加载时加载它:

(function (undefined) {
    if(!window.jQuery) {
        var script = document.createElement("SCRIPT");
        script.src = 'http://code.jquery.com/jquery-2.1.0.min.js';
        script.type = 'text/javascript';
        document.getElementsByTagName("head")[0].appendChild(script);

        // Poll for jQuery to come into existance
        var checkReady = function(callback) {
            if (window.jQuery) {
                callback();
            }
            else {
                window.setTimeout(function() { checkReady(callback); }, 100);
            }
        };
        // Start polling...
        checkReady(main);
    } else {
        main();
    }

}());

function main() {
    alert("jquery loaded");
};

取自https://stackoverflow.com/a/10113434/941764