我有一个 Rails 应用程序,当在我的 View 之一中的某些嵌入式 JS 中调用时,该应用程序无法加载 jQuery。我环顾四周并看到了一些常见的解决方案,因此我将列出我已经完成的操作:
jQuery 在我的 Gemfile 中未注释:
gem 'jquery-rails'
jQuery 已加载到 application.js 中:
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .
application.html.erb 使用 include 标签调用:
<%= javascript_include_tag 'application', 'data-turbolinks-track'=> true %>
我也尝试过:
<%= javascript_include_tag 'application' %>
哪里可能出了问题?
编辑:
我能够让它工作,但这是一个明确的解决方法,我想找出一个更永久的解决方案。首先,我发现一位同事对该服务器的设置略有不同,并且 application.html.erb 被另一个布局覆盖,该布局在头部(或文件中的其他任何位置)不包含 javascript_include_tag 行。尽管添加了该行代码,错误仍然存在。我从在线 API 链接( https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js )保存了 jquery.min.js 并将其放置在 asset 文件夹中,然后预编译并将以下行添加到布局的头部:
<%= javascript_include_tag 'jquery.min', 'data-turbolinks-track'=> true %>
这最终导致我的 jQuery 脚本中的 ajax 调用成功调用了脚本。但是,仍然存在两个问题:首先,正如我上面所说,我想要一个更持久、更少黑客的解决方案,其次,ajax 调用的成功函数不起作用,尽管它在我的私有(private)测试服务器上正常工作。两者之间的代码是相同的,所以我知道这不是代码中的问题,而且我几乎可以肯定它与一般扰乱 jQuery 的任何潜在问题有关。
最佳答案
尝试添加:
<%= javascript_include_tag 'application','jquery', 'data-turbolinks-track' => true %>
查看 jquery 文件是否正在您的页面上加载。
此外,您所做的解决方法无论如何都不是 hacky 或坏的,实际上对我来说,我更喜欢让 gulp照顾我所有的 Assets ,ruby 处理你的 Assets 的方式相当缓慢和笨重,特别是如果你试图将 Angular 之类的东西与 ui 路由器集成,我在 gulp 上编译和 mangle 的相同 Assets 大约需要 10 秒, ruby 需要超过 1 分钟。
您听说过的最后一件事bower ?它是一个很棒的包管理器,向您的应用程序添加依赖项非常容易。
关于javascript - jquery 未在 Rails 服务器上加载 - '$ is not defined',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41254203/