ActiveAdmin 破坏 Rails JQuery UJS。 Unobtrusive JavaScript ajax:success 和 ajax:error 没有触发或被调用
ActiveAdmin breaks Rails JQuery UJS. Unobtrusive JavaScript ajax:success and ajax:error are not firing or being called
我有以下
=form_for @issue, remote: true, html: {class: 'form-inline'} do |f|
...
和
<form class="form-inline" id="new_issue" action="/issues" accept-charset="UTF-8" data-remote="true" method="post">
和
$(document).on 'turbolinks:load', ->
$("#new_issue").on("ajax:success", (e, data, status, xhr) ->
console.log 'data='+data
console.log 'status='+status
console.log 'xhr='+xhr
$("#new_issue_success").append(xhr.responseText).show()
$("#new_issue_error").hide()
).on("ajax:error", (e, xhr, status, error) ->
console.log 'error='+error
console.log 'status='+status
console.log 'xhr='+xhr
$("#new_issue_error").append("ERROR: #{error}").show()
$("#new_issue_success").hide()
).on('ajax:complete', ->
console.log 'complete'
)
和
def create
issue = Issue.new issue_params
issue.validate_user_entry
if issue.errors.empty? && issue.save # can't use #valid? because that clears errors and runs only standard Rails validations!
render json: issue, status: :created
else
render json: issue.errors.full_messages, status: :unprocessable_entity
end
我在浏览器控制台中得到了这个
POST http://localhost:3000/issues 422 (Unprocessable Entity)
XHR failed loading: POST "http://localhost:3000/issues".
这在我的 Rails 服务器控制台中
Started POST "/issues" for 127.0.0.1 at 2018-06-07 22:29:34 -0400
Processing by IssuesController#create as JS
Parameters: {"utf8"=>"√", "issue"=>{"first_name"=>"", "last_name"=>"", "city"=>"", "issue"=>""}, "commit"=>"Submit"}
Completed 422 Unprocessable Entity in 1ms (Views: 0.2ms | ActiveRecord: 0.0ms)
那么为什么它不调用 Ajax 回调并在控制台上打印出结果呢?无论成功还是失败,我都希望它能显示结果。
直接取自指南:http://guides.rubyonrails.org/v5.0/working_with_javascript_in_rails.html#form-for
我也试过了
$(document).on("ajax:success", (e, data, status, xhr) ->
...
).on "ajax:error", (e, xhr, status, error) ->
...
我验证了事件正在监听浏览器中的元素
我在另一个有效的 Rails 项目中有几乎完全相同的东西。我像其他项目一样降级到 Rails 5.0.6,但没有帮助。
Rails5.0.7,JQuery3.3.1
我发现这是由 ActiveAdmin 引起的。我有 entered a bug for it。当我将 active_admin.js.coffee
重命名为 active_admin.js.coffee.xxx
时它会起作用,但当然会破坏 ActiveAdmin。我尝试将 //= stub active_admin
添加到 application.js
,但由于某些原因 jquery_ujs
无法加载。我查看了页面的源代码,尽管 //= require jquery_ujs
在 application.js
.
中,但 /assets/jquery_ujs.self-784...
将不再出现
我怎样才能同时拥有 ActiveAdmin 和 UJS?我不需要 /admin
页上的 UJS。
我通过将 active_admin.js.coffee
移动到 vendor\assets\javascripts\active_admin.js.coffee
来修复它。现在 /admin
有效,并且 /
处的远程表单有效。一点都不明显。希望他们把这个放在文档中,或者更好的是,不要干扰标准 Rails.
我有以下
=form_for @issue, remote: true, html: {class: 'form-inline'} do |f|
...
和
<form class="form-inline" id="new_issue" action="/issues" accept-charset="UTF-8" data-remote="true" method="post">
和
$(document).on 'turbolinks:load', ->
$("#new_issue").on("ajax:success", (e, data, status, xhr) ->
console.log 'data='+data
console.log 'status='+status
console.log 'xhr='+xhr
$("#new_issue_success").append(xhr.responseText).show()
$("#new_issue_error").hide()
).on("ajax:error", (e, xhr, status, error) ->
console.log 'error='+error
console.log 'status='+status
console.log 'xhr='+xhr
$("#new_issue_error").append("ERROR: #{error}").show()
$("#new_issue_success").hide()
).on('ajax:complete', ->
console.log 'complete'
)
和
def create
issue = Issue.new issue_params
issue.validate_user_entry
if issue.errors.empty? && issue.save # can't use #valid? because that clears errors and runs only standard Rails validations!
render json: issue, status: :created
else
render json: issue.errors.full_messages, status: :unprocessable_entity
end
我在浏览器控制台中得到了这个
POST http://localhost:3000/issues 422 (Unprocessable Entity)
XHR failed loading: POST "http://localhost:3000/issues".
这在我的 Rails 服务器控制台中
Started POST "/issues" for 127.0.0.1 at 2018-06-07 22:29:34 -0400
Processing by IssuesController#create as JS
Parameters: {"utf8"=>"√", "issue"=>{"first_name"=>"", "last_name"=>"", "city"=>"", "issue"=>""}, "commit"=>"Submit"}
Completed 422 Unprocessable Entity in 1ms (Views: 0.2ms | ActiveRecord: 0.0ms)
那么为什么它不调用 Ajax 回调并在控制台上打印出结果呢?无论成功还是失败,我都希望它能显示结果。
直接取自指南:http://guides.rubyonrails.org/v5.0/working_with_javascript_in_rails.html#form-for
我也试过了
$(document).on("ajax:success", (e, data, status, xhr) ->
...
).on "ajax:error", (e, xhr, status, error) ->
...
我验证了事件正在监听浏览器中的元素
我在另一个有效的 Rails 项目中有几乎完全相同的东西。我像其他项目一样降级到 Rails 5.0.6,但没有帮助。
Rails5.0.7,JQuery3.3.1
我发现这是由 ActiveAdmin 引起的。我有 entered a bug for it。当我将 active_admin.js.coffee
重命名为 active_admin.js.coffee.xxx
时它会起作用,但当然会破坏 ActiveAdmin。我尝试将 //= stub active_admin
添加到 application.js
,但由于某些原因 jquery_ujs
无法加载。我查看了页面的源代码,尽管 //= require jquery_ujs
在 application.js
.
/assets/jquery_ujs.self-784...
将不再出现
我怎样才能同时拥有 ActiveAdmin 和 UJS?我不需要 /admin
页上的 UJS。
我通过将 active_admin.js.coffee
移动到 vendor\assets\javascripts\active_admin.js.coffee
来修复它。现在 /admin
有效,并且 /
处的远程表单有效。一点都不明显。希望他们把这个放在文档中,或者更好的是,不要干扰标准 Rails.