问题 为什么jQuery没有加载到我的Rails 3.2.3应用程序中?


直到昨天,jQuery在我的Rails应用程序中加载得很好。我正在玩安装debugger / ruby​​-debug gem。您可能已经意识到Rails 3中的调试器gem存在问题,但我没有成功安装依赖项,因此我从Gemfile中删除了gem。从那时起加载我的网站jQuery没有加载。这些是我在控制台中看到的消息:

assets/jquery_ujs.js?body=1:377Uncaught ReferenceError: jQuery is not defined
bootstrap-transition.js:24Uncaught TypeError: undefined is not a function
bootstrap.js:3Uncaught ReferenceError: jQuery is not defined
welcome:210Uncaught ReferenceError: $ is not defined

这是我的application.js文件:

//= require jquery
//= require jquery_ujs
//= require twitter/bootstrap
//= require_tree .

如果我在layouts / application.html.erb中显式加载jQuery,就像这样,它可以工作:

<%= javascript_include_tag "http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" %>
<%= javascript_include_tag "application" %>

有什么想法我可以做什么来解决这个并再次加载jQuery?查看.rvm / gems / ruby​​-1.9.3-p125 / gems / jquery-rails-2.0.2 / vendor / assets / javascripts我可以看到jquery.js和jquery.min.js仍在那里。


1716
2018-05-11 14:29


起源

你还有吗? gem 'jquery-rails' 你的gemfile中的行? - Dylan Markow
当然。甚至还成功安装了一个gem'jquery-rails'。 - Ryan Arneson
您是否尝试将jquery库放在app / assets / javascripts文件夹中? - uday
不,我从来没有去过。据我所知,jQuery包含在一个新的Rails应用程序中。无论如何,这基本上就是我在上面的代码片段中所做的,但我使用的是CDN而不是本地库。显然,对于生产我会使用本地库也可以退回,但这只是一个测试。 - Ryan Arneson
您必须与JS文件存在某种冲突。尝试重新排序树,看看是否有所作为。 - David


答案:


谢谢@Djj。重新订购我的application.js树似乎已经解决了这个问题。这是我修改后的树:

//= require jquery_ujs
//= require jquery
//= require twitter/bootstrap
//= require jquery.placeholder
//= require_tree .

11
2018-05-15 14:11



知道为什么会这样吗? - tibbon
这也解决了我的问题! - kibaekr


在我的情况下,问题是由于异步加载javascript文件。

<%= javascript_include_tag "application", :async => true %>

切换回

<%= javascript_include_tag "application" %>

解决了这个问题。


4
2018-01-14 16:05



这也为我修好了。我想利用异步,不知道为什么会导致问题? - Marklar


经过很长一段时间,这解决了我的错误问题。

确保Jquery仅加载一次。

包括 gem 'jquery-rails'  在Gemfile中做 $ bundle install

确保包含这些内容 app/assets/javascripts/application.js 文件。

//= require jquery
//= require jquery_ujs

错误时的语法就像 // require jquery 导致不加载jquery。

如果所有内容都包含在内,则html文件的页面源必须显示包含的所有源文件。

对我来说,我有一个问题,因为我在app / views / layouts下的application.html.erb中明确加载了google的jquery插件源,除了在app / assets / javascript下的application.js文件中要求它。这导致jquery再次被定义,并且几乎没有错误 placeholder() 没有定义的, oApi 没有定义 null 会弹出来的。


0
2017-07-08 12:33