Javascript 从AJAX调用返回的like.js.erb中未定义jQuery和$

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

我正在使用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
  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在本地显示的信息,但我无法让它工作

请参考这些帖子以获取修复:

作为参考,我遵循了其他网站的指南,介绍了如何让bootstrap/jquery与webpack和rails5.2/6一起工作,但即使它确实让它们工作。我没有看到他们确认jquery在ajax中也可以工作

指南示例:


该副本的可能副本不是rails或与此类似的。是的,它可以正常加载。作为引导,它的所有调用和页面上的所有操作都很好。这只是ajax请求的结果。我的代码中存在引号,我只是在这篇文章中输入了错误的引号。请检查包含jquery文件的顺序。它必须在脚本之前呈现。我尝试过移动顺序,但没有任何区别。同样,页面的初始加载很好,因此jquery可以正常工作,但只有在ajax响应上没有。这可能有助于人们好奇为什么会发生这种情况