我的 ajax 回调没有在我的生产环境中触发。但是,它们在没有错误的情况下在开发中触发。为了讨论,我会简化一些事情。
假设我有一个使用的链接remote: true
:
<%= link_to "Add Foo", new_foo_path, remote: true, id: 'new-foo' %>
foos_controller.rb
class FoosController < ApplicationController
def new
@foo = Foo.new
render partial: 'form' if request.xhr?
end
end
使用 Chrome 的控制台,我绑定到ajax:success
:
$(document).on("ajax:success", "#new-foo", function() { console.log("success!"); });
在开发中,这工作正常;我得到了“成功!” Chrome 控制台中的消息。
然而,在生产中,它没有。正在发出请求,响应是form
部分的,但不会触发回调。
有任何想法吗?
PS。以下也不起作用。
$("#new-foo").bind("ajax:success", function() { console.log("success!"); })
没有任何变化config/environments/production.rb
。
编辑:事实证明 ajax:error 当我单击生产中的链接时被触发。
$(document).on("ajax:error", "#new-foo", function() { console.log("error"); });
我的生产日志没有显示任何错误,并且 Chrome 开发人员工具中的网络选项卡显示以200 OK
部分作为正文的响应。
但是,Content-Type 标头正在text/javascript
生产中,但text/html
正在开发中。为什么text/javascript
在生产中响应相同的代码?