【问题标题】:Valid jQuery scripts not loading in production mode有效的 jQuery 脚本未在生产模式下加载
【发布时间】:2012-02-13 00:04:54
【问题描述】:

我的网站在生产模式下遇到了一些问题。从 jQuery 脚本中得到一些错误,所以它没有加载。想 jQuery.noConflict();可以解决它,但它让我失望了!现在尝试了很多东西,所以我愿意接受任何有关解决方案或调试的建议。

这是我的错误:

Uncaught controls.js requires including script.aculo.us' effects.js library
/#about:30Uncaught TypeError: Object [object Object] has no method 'cycle'
/#about:12Uncaught TypeError: Object [object Object] has no method 'cycle'

解决它的人将获得一颗金星!谢谢;(

【问题讨论】:

  • 你是故意同时使用 Prototype 和 jQuery 吗?
  • @gg_s 嗯,不,不是。从来没有打算使用原型..虽然不知道如何删除它,嗯..
  • 这可能是因为当我在生产模式下移动它时,它是服务器上第一个错误版本的rails,所以我尝试将它从3.1.1更改为3.0.10,但意思是当我这样做时,支持升级了我服务器上的导轨,所以我不得不重做所有更改。现在它看起来很精简,它包括原型仍然......

标签: jquery ruby-on-rails production-environment


【解决方案1】:

您需要先修复第一个错误,然后再处理后续错误(因为它们可能来自级联故障)。根据您未捕获的异常,您有一个名为“controls.js”的脚本,需要在页面上加载 script.aculo.us 库才能工作。从这里下载库Script.aculo.us 将其放入您的 Web 目录,并在加载 controls.js 之前包含它:

<script type="text/javascript" src="/location/to/scriptaculous.js"></script>

【讨论】:

    【解决方案2】:

    金星?行 我有一个类似的问题。你的问题不是 jQuery.noConflict();它也不是原型 js,而是您没有将所有内容添加到 noconflict

    1 - 首先对齐所有其他不使用 jquery ex 的库:

    <script src="js/scriptaculous/lib/prototype.js" type="text/javascript"></script>
    
    <script src="js/scriptaculous/src/scriptaculous.js" type="text/javascript"></script>
    

     <script language="javascript" src="js/protoplasm/protoplasm.js"></script>
    
     <script>
            Protoplasm.use('rte').transform('textarea.richeditor');
    </script>
    

    2 - 之后插入您的 jquery 文件并在使用 jquery 的任何其他库或代码之前直接跟进 noconflict

    <script type="text/javascript"  src="js/jquery/jquery-2.1.1.min.js"></script>
    <script type="text/javascript">
    
        $.noConflict();
    
        </script>
    

    3 - 最重要的是,这就是您遗漏重点的地方 打开你拥有的每一个其他javascript代码作为使用jquery的js,如Bootstrap.min.js或app.js,如果你在里面找到jquery,然后放在代码的顶部,在文件的开头(例如在bootstrap.min.js 的开头)下面的代码

    jQuery( document ).ready(function( $ ) {
    // Code that uses jQuery's $ can follow here.
    
    
    ///////////////////////////////////////////////////////////////////////////////
    

    4- 在代码的最后(例如 bootstrap.min.js 的末尾)输入以下代码

    ///////////////////////////////////////////////////////////////////////////////
    
    });
    

    5 - 将所有其他使用 jquery 的代码放在另一个页面之间

     jQuery( document ).ready(function( $ ) {
        // Code that uses jQuery's $ can follow here.
    
    
        ///////////////////////////////////////////////////////////////////////////////
    
    
     ///////////////////////////////////////////////////////////////////////////////
    
        });
    

    如您所见,仅 jquery noconflict 是不够的。如果您不想受到任何干扰,您真的必须在任何使用 jquery 的地方添加这些代码,即使在外部文件中也是如此

    您可能会在使用 firebug 的 controls.js 中遇到一些错误,但您的所有代码都可以正常工作。即使你删除了 control.js,只要你的页面上有 scriptaculous.js,Firebug 总会给你和 TypeError 之类的错误:this.element is null controls.js 但你所有的代码都可以正常工作。

    请不要忘记金星。谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-20
      相关资源
      最近更新 更多