jquery_ujs 和 rails-ujs 问题 ajax 页面的问题
Posted
技术标签:
【中文标题】jquery_ujs 和 rails-ujs 问题 ajax 页面的问题【英文标题】:probleme with jquery_ujs and rails-ujs problem ajax page 【发布时间】:2020-07-18 21:27:43 【问题描述】:我是 rails 和 ruby 的新手,我是 1 周前才开始的。
我正在尝试在 Rails 上的两个人之间进行聊天,其中 jquery 用于 ajax 部分。
一切正常,但我遇到了这个我不明白的错误,真的很困扰我
错误的图像(无法将其包含在图像应答器中) https://ibb.co/KKjKLPf
VM17:2082 未捕获错误:如果同时加载 jquery_ujs 和 rails-ujs,请仅使用 rails-ujs。
我了解我同时使用 jquery_ujs 和 rails-ujs,而 rails 希望我只使用 rails-ujs。
我的主页 (index.hmtl.erb) 有这个代码
<h1>welcome to the chat </h1>
<div id='conv'>
<div id='message'>
</div>
<div id='sendmsg'>
<%= form_tag "/", method: "post" do %>
<input type='hidden' name='name' value='phil'/>
<input id='tex' type="text" name="message" />
<input id='sen' type="submit" value="send" />
<% end %>
</div>
</div>
我的javascript是这样的
window.addEventListener('load', function ()
setInterval(refreshMessage,3000);
function refreshMessage()
$.ajax(
type: 'GET',
url: '/chatBoard',
success: function(data)
$('#message').html(data);
,
error : function()
$('#message').html('error');
)
;
);
这个 ajax 向服务器发送一个 GET 到 '/chatBoard',它会用这个脚本返回数据库中的所有消息。
<% @messages.each do |message| %>
<%= message.name %> :
<%= message.message %>
<% end %>
我试图找到一个解决方案,但我仍然卡住了,所以我把它贴在这里,我想做这个工作,但没有这个错误。 我该怎么办?用 CoffeeScript 更改我的 ajax 请求?还没学过 CoffeeScript:/
编辑:
你好,我不知道为什么,但是在 application.js 中删除一些东西就可以了
// require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")
require("custom")
我刚刚对 require("@rails/ujs").start() 做了评论,错误不再出现,代码仍然有效:/磨损
【问题讨论】:
【参考方案1】:我的猜测是在你的application.js
文件中,你有
//= require rails-ujs
//= require jquery_ujs
如果您删除 //= require jquery_ujs
,错误应该会消失。
【讨论】:
你好,谢谢你的回答 :D 但我只在 application.jsrequire("@rails/ujs").start(). require("turbolinks").start(). require("@rails/activestorage").start(). require("channels"). require("custom")
对不起格式。我找不到如何在代码 backstick 中换行
感谢我评论 rails/ujs 并且它可以工作,不知道为什么:D【参考方案2】:
正如错误所说,您正在导入两个库用于同一目的,jquery-ujs
和 rails-ujs
。因此,根据您使用的 Rails 版本,您只需要保留一个。如果您的版本是 5.0 或之前的版本,您需要使用 jquery-ujs
,但如果您使用的是 Rails 5.1 及更高版本,则需要使用 rails-ujs
。此外,如果您需要对 jQuery 的支持,正如您在评论中提到的,您需要在您的Gemfile
中添加jquery-rails
gem,在控制台中运行bundle install
,并在application.js
添加//= require jquery
(在您导入 jquery-ujs
或 rails-ujs
的行上方)。
【讨论】:
以上是关于jquery_ujs 和 rails-ujs 问题 ajax 页面的问题的主要内容,如果未能解决你的问题,请参考以下文章
如何在禁用管道中包含“jquery_ujs”以便能够对表单使用“remote:true”?
Rails 5.1 中是不是还需要`require jquery_ujs`?
用 ajax:beforeSend 修改后继续执行 ajax 请求