我将Rails6与bootstrap和webpack一起使用。一切正常。Bootstrap工作,jQuery工作,等等,直到..
我正在学习这个acts_as_votable教程:https://blog.makersacademy.com/how-to-make-a-dynamic-rails-like-differ-button-using-the-acts-as-votable-gem-9ab71686ff82
当PostController喜欢post时,它进入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)
但是jQuery仍然正常工作,因为我的引导程序没有错误。只有当它通过ajax进入时,它才会失去它。
在PostsController中:
respond_to :js, :html, :json
def like
@post = Post.find(params[:id])
if params[:format] == 'like'
post.liked_by current_user
elsif params[:format] == 'unlike'
post.unliked_by current_user
end
end
$('.liked-btn').on('ajax:success', function(){
$(this).parent().parent().find('.like-count').html('<%= @post.get_likes.size %> &128591');
$(this).closet('.liked-btn').html('Like');
});
$('.like-btn').on('ajax:success', function(){
$(this).parent().parent().find('.like-count').html('<%= @post.get_likes.size %> &128591');
$(this).closet('.like-btn').html('Liked');
});
注意:我也尝试用jQuery替换$,得到了同样的错误,除了当时用jQuery未知。
好吧,这似乎是因为即使加载了jQuery,但它在视图中是不可见的(不管这意味着什么,老实说,这不是我的专长领域)。
所以我的测试显示jquery已加载。但它只对WebPack可见?我猜?
修复方法是在app/javascript/packs/application.js中添加以下内容
import $ from 'jquery';
global.$ = jQuery;
const { environment } = require('@rails/webpacker')
const webpack = require("webpack")
environment.plugins.append("Provide", new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
Popper: ['popper.js', 'default']
}))
module.exports = environment
所以也许有一个更好的地方把快捷符号放在两者都能看到的地方,但我不确定。到目前为止,application.js的条目使其全部工作。
需要注意的是,我确实找到了“expose-loader”可以帮助jquery在本地被看到的信息,但我无法使其起作用。
引用这些文章获取修复:
问题内容: 我试图在我自己的函数中使用jQuery ajax调用的返回值,但它始终返回未定义的值。 ajax调用绝对有效,因为当我取消注释警报时,我得到了正确的返回,并且可以在firebug中看到它。我在做蠢事吗? 问题答案: AJAX调用是异步的-这意味着AJAX请求是按常规程序执行顺序发出的,并且在您的程序中这意味着不会将数据返回警报。 您不能以这种方式使用调用的返回值,而是将利用AJAX返回
问题内容: 我正在使用jQuery的网页上工作。我有一个Ajax调用,它从服务器获取数据并更新div。在该数据内部有一个jQuery函数,但是在将数据加载到页面中之后未调用该函数。我已经在页面中包含了正确的js文件。 这是从Ajax调用返回并放入div的内容: 将html插入页面后,如何使返回的javascript运行? (我将Rails与jRails插件结合使用) 问题答案: 如果要对具有htm
问题内容: 我希望此函数返回ajax调用是否成功。有什么办法可以做到吗?我下面的代码无法做到这一点。 问题答案: 不幸的是,您不能将值返回给包装异步回调的函数。取而代之的是,您从AJAX请求进行的成功回调会将数据和控制权移交给另一个函数。我在下面演示了这个概念: myFunction的定义: 回调函数定义: 调用myFunction:
问题内容: 我正在为网站进行股票交易所jQuery修复。 编辑:它根据返回的值更新网页上的ID / CLASS或输入值。 index.php: 目前它正在返回: 我也尝试过使用.text()将其返回到div demo.json: 请有人能告诉我我做错了什么。 提前致谢! 问题答案: 你可以这样做: 所以这里的主要问题是: 正如ajax一样,您需要执行ajax成功回调中的所有逻辑,并且始终会获得&变
问题内容: 我有一个jQuery对话框打开,然后进行AJAX调用。我想这样做,以便如果关闭对话框或按下“取消”按钮,则取消AJAX调用,并且不调用其回调函数。我可以想到一些使用变量的方式,例如: 但是,从某种程度上来说,这对我来说很肮脏,并且实际上并没有阻止AJAX调用完成。是否有内置的方式来取消正在进行的AJAX呼叫? 问题答案: 好的,因此基于使用$ .get函数返回的XmlHttpReque
问题内容: 我有一些jQuery代码。我已经调用了一个Ajax函数文件file.php,其中包含一些字段,例如: 我会再次分配给jQuery函数吗?如果是这样,我该怎么办?我附上了一个示例文件: 问题答案: 该函数采用一个参数,其中包含获取的数据。因此,在您的示例中: 更多示例在jQuery文档中。