Javascript 从AJAX调用返回的like.js.erb中未定义jQuery和$
我正在使用Rails6和引导和网页包。一切正常。引导工作、jQuery工作等,直到 我将遵循以下acts_as_votable教程: 当PostController喜欢该帖子时,它会进入like.js.erb,然后在浏览器中返回错误Javascript 从AJAX调用返回的like.js.erb中未定义jQuery和$,javascript,jquery,ruby-on-rails,Javascript,Jquery,Ruby On Rails,我正在使用Rails6和引导和网页包。一切正常。引导工作、jQuery工作等,直到 我将遵循以下acts_as_votable教程: 当PostController喜欢该帖子时,它会进入like.js.erb,然后在浏览器中返回错误 Uncaught ReferenceError: $ is not defined at <anonymous>:1:1 at processResponse (rails-ujs.js:282) at rails-ujs.js.195
Uncaught ReferenceError: $ is not defined
at <anonymous>:1:1
at processResponse (rails-ujs.js:282)
at rails-ujs.js.195
at XMLHttpRequest.xhr.onreadystatechang (rails-ujs.js:263)
在like.js.erb中:
$('.liked btn').on('ajax:success',function()){
$(this.parent().parent().find('.like count').html('&128591');
$(this.clock('.liked btn').html('Like');
});
$('.like btn').on('ajax:success',function()){
$(this.parent().parent().find('.like count').html('&128591');
$(this.clock('.like btn').html('like');
});
“likes”似乎只是注册了返回错误的ajax和javascript。根据教程,路线看起来很好
一件有趣的事情是,在我的控制器中,我将“respond\u to”误输入为“responses\u to”,它给出了一个错误@posts.get\u likes方法,这是nilClass所不知道的。这意味着它并没有在$symbol上爆炸,并且在那个实例中对jquery理解得很好。控制器里有什么东西导致了这一切?(更不用说有趣的事情了,可能只是在运行javascript之前对ERB进行了处理)
注意:我还尝试用jQuery替换$,但得到了相同的错误,当时jQuery未知除外。大多数情况下,这个错误“$notdefined”是由于jQuery库在我们加载的页面不可用。请检查浏览器上的控制台网络是否正在加载jquery库
请在元素选择器中添加引号,如下所示:
$('.linked-btn').on('ajax:success',funcion(){
好的,这似乎是由于这样一个事实,即即使jQuery被加载,它在视图中也不可见(不管这意味着什么,老实说,这不是我的专业领域) 因此,我的测试显示jquery已加载。但它只对网页可见?我想是吧 修复程序是将以下内容添加到您的app/javascript/packs/application.js
import$from'jquery';
全局$=jQuery;
完成后,视图可以看到指向jquery的符号
现在我的应用程序在config/webpack/environment.js中已经有以下内容
const{environment}=require(“@rails/webpacker”)
const webpack=require(“webpack”)
environment.plugins.append(“提供”),new webpack.ProvidePlugin({
$:“jquery”,
jQuery:'jQuery',
Popper:['Popper.js','default']
}))
module.exports=环境
但显然,这还不足以从视图中看出。不过,它确实可以让TurboLink/bootstrap/etc正常工作
所以也许有更好的地方可以把快捷方式符号放在双方都能看到的地方,但我不确定。到目前为止,application.js的条目可以让一切正常工作
应该注意的是,我确实找到了“公开加载程序”可以帮助jquery在本地显示的信息,但我无法让它工作
请参考这些帖子以获取修复: