问题标签 [rails-ujs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3320 浏览

ruby-on-rails - 找不到类型为“application/javascript”的文件“rails-ujs”(页面加载)

使用 devise for auth 创建了一个 Rails 5 应用程序,并尝试为论坛添加 Thredded gem。

预期行为

该应用程序应在http://localhost:3000加载。

实际行为

服务器启动后,以下消息会显示在应用程序所在的 chrome 浏览器中。

找不到类型为“application/javascript”的文件“rails-ujs”

谢谢你。

0 投票
0 回答
96 浏览

ruby-on-rails - 如何重新初始化 rails-ujs

我的 Rails 应用程序中有一个视图,其中包含一个链接:

此链接在其自身上按预期工作。

但我将它嵌入到mdc 库的抽屉组件中。现在该链接似乎像常规链接一样工作。

抽屉打开后有没有办法重新初始化rails-ujs?还是规避问题?

0 投票
1 回答
646 浏览

ruby-on-rails - 升级后的 Rails 5.1.4 Ajax 问题

在我的 account.js.coffee 上,我有这个来查看是否调用了 Ajax 事件。

结尾

当我远程提交我的表单时,应该触发一个 Ajax 事件,如果有错误应该触发 Ajax 错误,或者当对象被更新时触发 Ajax:success; 但是当表单出现错误时触发Ajax成功(当属性必须存在时为空属性),并且当对象成功更新时不会触发Ajax。该表单具有 remote:true 属性,并且在 application.js.coffee 上我有 jQuery、rails-ujs。我收到 ajax:error 事件的唯一一次是我故意从 update.js.erb 页面中删除对象以查看 Ajax:error 是否被触发。当 rails 在 4.2 上(更新之前)一切正常:(

这是我在表单上出现错误时在控制台上收到的事件。CustomEvent {isTrusted: false, detail: Array, initCustomEvent: function, type: "ajax:success", target: , ...}

更新.js.erb

到目前为止,我发现如果您在引导程序(版本 3)模式中插入表单,那么当您点击提交表单(远程:true)并且它成功时,ajax:success 回调将不会被触发。如果对象因为错误而回滚(属性不能为空),那么 ajax:success 它就是触发器。当我在 accounts/edit.html.haml 上使用表单时,我的 Jquery 验证被触发,并且 ajax:success 在对象更新时也被触发。谢谢你的帮助。

0 投票
0 回答
212 浏览

ruby-on-rails-5 - rails-ujs 在 Safari 中不起作用

form_with我使用诸如打击之类的助手实现了一个表单。

在Javascript中..

Chrome 和 Firefox 都可以正常工作,但 Safari 不能正常工作。

Safari 不支持request.readyState = XMLHttpRequest.OPENED. 所以 rails-ujs 不会在 Safari 中发送 ajax。

https://github.com/rails/rails/blob/master/actionview/app/assets/javascripts/rails-ujs/utils/ajax.coffee line27

rails-ujs不支持 Safari 浏览器?谢谢。

环境

  • 红宝石'2.4.3'
  • 动作视图(= 5.1.4)
  • Safari 11.0.2 (13604.4.7.1.3)
0 投票
1 回答
312 浏览

ruby-on-rails - 谷歌标签管理器干扰 Rails UJS 远程:真

我将 GTM 包含在我<head>的以下内容中:

并且在<body>

在我的页面上,我有一个link_to使用 rails-ujs 从数据库中删除图像的助手。

当我从页面中删除 GTM 代码时,删除链接按预期执行。

但是,使用 GTM 代码后,单击该链接会在尝试发出 GET 请求时导致路由错误。

No route matches [GET] "/..."

在我看来,GTM 正在干扰 rails-ujs,但我不确定最好的方法来解决这个问题。

编辑:我已经尝试使用和不使用 turbolinks:load 侦听器的代码,但结果相同。

0 投票
0 回答
1350 浏览

ruby-on-rails - 从 `jquery_ujs` 移动到 `rails-ujs` 后,为什么 jquery 对象没有在测试中初始化?

从 迁移jquery_ujs到之后rails-ujs,某些 JS 测试失败并且证明非常难以调试。

问题似乎是 Jquery 对象仅针对序列中的第一个测试进行初始化。在我的开发环境中一切正常。

升级到 Rails 5.1 后一切正常jquery_ujs。然后我只对application.js.

这是一个例子。与 select2 字段交互的两个几乎相同的系统测试。

一起运行时,这些测试之一将失败

如果我只专注并运行其中一项或多项测试,它们就会通过。

我考虑过这是否可能是一个 turbolinks 问题(我不认为这是因为测试有时会通过)。尽管如此,我尝试了各种方法来使用 Turbolinks 初始化 Select2,但没有成功。

rails-ujs测试之间是否存在或jquery_ujs可能影响 jquery 初始化的根本区别?我是否忽略了一些配置?调试此问题的合乎逻辑的步骤是什么?

0 投票
1 回答
410 浏览

ruby-on-rails - Rails.ajax 调用返回 false (rails-ujs)

我正在尝试将 ajax 与rails-ujs一起使用,但我的调用什么也没做。该应用程序使用 rails 5.1 并在 application.js 中有 rails-ujs 要求

当我在浏览器控制台中测试代码时,它返回 false。

下面是代码:

0 投票
2 回答
2838 浏览

ruby-on-rails - Rails 5.2:Rails UJS、Turbolinks 和 CSP

我们最近将我们的应用程序升级到 Rails 5.2。我们还使用 Turbolinks(连同 Rails 引擎)和 RailsUJS。

在 Rails 5.2 中,我们为 CSP(内容安全策略)提供了新的 DSL。它的配置如下initializers/content_security_policy.rb

这工作正常。但是我不能让 Turbolinks 和 RailsUJS 一起工作。

app/views/layouts/application.html.haml我们有(简化):

假设我们有一个这样的 ujs 按钮:

还有一个看起来很简单的控制器:

这工作正常,我们在来自 Turbolinks rails 引擎的浏览器中得到了正确的响应:

但是我们得到了错误:

拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“script-src 'self' https: 'nonce-QAz+FlHz5wo0IwU5sIMZ/w==' 'nonce-IsrK1b0jw1w7cqRhHeZ7ug==' 'nonce-Rpl8hMBgap79cfwdlXXwjA==' ' nonce-1Wq7MbBEYMDCkEWGexwQ9Q==' 'nonce-EUL22iiKHn0hkNuW3fpkbA==' 'nonce-F5Vg50g0JvAvkXHHu+p0qw==' 'nonce-slHxjCy9VVEvvoIcJ870lg==' 'nonce-lboTgbdLG4iCgUozIK4LPQ==' 'nonce-K9yAPOgjZDXRTvnJb3glTA==' 'nonce-ux2kfUZjU/nxJn30LaTFjQ= =' 'nonce-8E8cTAX+jWNpvl5lw0Ydjw==' 'nonce-BvJ4wU3AqjZRWY930+W8kg==' 'nonce-PsS01n7AnjmiThKQJFzUBA==' 'nonce-RCoOSLXbx6Cj8aw+LuBSwA==' 'nonce-o5MfDl/crSPzjSyMzIvXNA==' 'nonce-s8NPaOETMpU2f48LR2SuqQ= =''nonce-Omuo2P68l09PTBFxmk4DkA==''nonce-N3YQfaIuPSrURB8jhVz3Sw==' 'nonce-Ts4Bp4GUqawLcHI1mRLcxw==' 'nonce-fTZ6W2u9eh8K5yCJMPfJGg==' 'nonce-1ST0058rq41fDhw8CforxA==' 'nonce-tA+jUJ1x841ZseUUjvQn9w==' 'nonce-CVjBLiByDSqBNHdG6/izBA==' 'nonce-1z6mH6xtPajsxVmojM8SNA= =' 'nonce-0zlDfL8I0go9aII/DGZUzg==' 'nonce-WOrw4qdxeKfZQ1R7xUfdbQ==' 'nonce-G8kmjJA5E35Asgy6mj80PQ=='"。要么是 'unsafe-inline' 关键字,要么是哈希 ('sha256-9KVlOPCQBe0izU2+kIJoBA6hi7N+a) , 或者需要一个 nonce ('nonce-...') 来启用内联执行。nonce-1z6mH6xtPajsxVmojM8SNA==' 'nonce-0zlDfL8I0go9aII/DGZUzg==' 'nonce-WOrw4qdxeKfZQ1R7xUfdbQ==' 'nonce-G8kmjJA5E35Asgy6mj80PQ=='''unsafe-I6BA96651 关键字,一个 OPCQN+0+KVhi aI2yVDUXS9gYk4PizU=') 或 nonce ('nonce-...') 需要启用内联执行。nonce-1z6mH6xtPajsxVmojM8SNA==' 'nonce-0zlDfL8I0go9aII/DGZUzg==' 'nonce-WOrw4qdxeKfZQ1R7xUfdbQ==' 'nonce-G8kmjJA5E35Asgy6mj80PQ=='''unsafe-I6BA96651 关键字,一个 OPCQN+0+KVhi aI2yVDUXS9gYk4PizU=') 或 nonce ('nonce-...') 需要启用内联执行。

所以这里的第一个问题:这么多随机数是从哪里来的?

另一项调查:在我在 javascript 控制台中调用 Turbolinks.visit 后,csp-noncecsrf-token值正在发生变化。我认为这一定是问题所在。由于 Rails UJS 使用原始值将 nonce 添加到它创建的内联 javascript 标记中。但是在一切都被渲染之后,随机数发生了变化。所以内联标签不再有效。我怎样才能避免这种情况?

-- 注意:我们通过 webpacker 设置 Turbolinks 和 RailsUJS,如下所示:

在此先感谢,
水疗中心

0 投票
2 回答
1699 浏览

jquery - Rails 5:使用 rails-ujs 和 jquery 处理错误消息

在 Rails 5.1.6 中,我尝试使用 rails-ujs 和 jquery 处理表单的错误消息。

很多.rb

lot_controller.rb

正如预期的那样,当我提交无效表单时,我在浏览器控制台 422 状态和 json 响应中看到:

问题是如何用 rails-ujs 渲染这个 json 响应?

_form.html.erb

创建.js.erb

应用程序.js

出了什么问题?感谢您的任何解释,尤其是解决方案(;

0 投票
1 回答
567 浏览

javascript - ActiveAdmin 破坏了 Rails JQuery UJS。不显眼的 JavaScript ajax:success 和 ajax:error 没有触发或被调用

我有以下

我在浏览器控制台中得到了这个

这在我的 Rails 服务器控制台中

那么为什么它不调用 Ajax 回调并在控制台上打印出结果呢?无论成功还是失败,我都希望它能够显示结果。

它直接取自指南: http: //guides.rubyonrails.org/v5.0/working_with_javascript_in_rails.html#form-for

我也试过

我验证了事件正在监听浏览器中的元素

在此处输入图像描述

在另一个有效的 Rails 项目中,我有几乎完全一样的东西。我像其他项目一样降级到 Rails 5.0.6,但没有帮助。

导轨 5.0.7,jQuery 3.3.1


我发现这是由 ActiveAdmin 引起的。我已经为它输入了一个错误。当我重命名active_admin.js.coffeeactive_admin.js.coffee.xxxthen 它可以工作,但当然会破坏 ActiveAdmin。我尝试添加//= stub active_adminapplication.js,但由于某种原因jquery_ujs无法加载。我查看了该页面的来源/assets/jquery_ujs.self-784...,尽管//= require jquery_ujs位于application.js.

我怎样才能同时拥有 ActiveAdmin 和 UJS?我不需要/admin页面上的 UJS。