在尝试推迟Jquery时我得到一个TypeError,我该如何克服这个问题?

时间:2014-07-10 18:50:09

标签: javascript jquery

我的问题基于这个主题:Possible to defer loading of jQuery?

我使用了该帖子的第一个答案,它很有效..大多数情况。我在FF Firebug控制台,FF开发控制台和Chrome开发控制台中收到“TypeError:success is not function”。我想问Dan Atkinson关于他的成功函数的解决方案,但由于50个代表我无法评论,所以这就是为什么这是一个单独的问题。

这是我当前的脚本(由于包含一些敏感信息而被截断):

(function() {
function getScript(url, success) {
    var script = document.createElement('script');
    script.src = url;
    var head = document.getElementsByTagName('head')[0],
        done = false;
    script.onload = script.onreadystatechange = function() {
        if (!done && (!this.readyState || this.readyState === 'loaded' || this.readyState === 'complete')) {
            done = true;
            success();
            script.onload = script.onreadystatechange = null;
            head.removeChild(script);
        }
    };
    head.appendChild(script);
}
getScript('http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js', function() {
    // YOUR CODE GOES HERE AND IS EXECUTED AFTER JQUERY LOADS
    {% if template contains 'product' %}
    jQuery(document).ready(function($) {
        $("a.zoomer").fancybox({
            padding: 0,
            'titleShow': false,
            overlayColor: '#000000',
            overlayOpacity: 0.2,
            fitToView: false,
            autoSize: false,
            height: 1500
        });  
  }); {% endif %}
// script truncated
});

})();

(function() {
function getScript(url, success) {
    var script = document.createElement('script');
    script.src = url;
    var head = document.getElementsByTagName('head')[0],
        done = false;
    script.onload = script.onreadystatechange = function() {
        if (!done && (!this.readyState || this.readyState === 'loaded' || this.readyState === 'complete')) {
            done = true;
            success();
            script.onload = script.onreadystatechange = null;
            head.removeChild(script);
        }
    };
    head.appendChild(script);
}
getScript("{{ 'jquery.fancybox.pack.js' | asset_url }}");
getScript("{{ 'slick.min.js' | asset_url }}");
getScript("{{ 'option_selection.js' | shopify_asset_url }}");
getScript("{{ 'api.jquery.js' | shopify_asset_url }}");
getScript("{{ 'jquery.tweet.js' | asset_url }}");
getScript("{{ 'scripts.js' | asset_url }}");
getScript("{{ 'jquery.lazyload.min.js' | asset_url }}");

})();

我在{code tags}中尝试获取脚本时遇到了很多麻烦,所以如果没有post验证器给我一个警告,我就无法完成整个脚本。它可能是脚本中的液体代码。

以下是我收到的错误的一些屏幕截图: http://screencast.com/t/q1idygFanob http://screencast.com/t/mKpGiEPHsA

我需要推迟jQuery和所有相关脚本,以提高Google页面速​​度的洞察力。它说我们需要删除渲染阻塞脚本,其中一个是jQuery。

我试图删除success();,这使整个事情无效。我尝试了丹·阿特金森在评论if(success && getClass.call(success) == '[object Function]') { success(); }中所说的话,但我认为我做错了。

有谁可以告诉我success();部分有什么问题?

1 个答案:

答案 0 :(得分:0)

successgetScript的第二个参数。但是你没有为大多数getScript电话提供第二个参数。

如果您希望success参数是可选的,请更改:

success();

为:

success && success();