包括ActionController :: Live会破坏现有的AJAX调用

时间:2014-08-01 21:52:27

标签: javascript ruby-on-rails ajax html5

我有一个具有多个操作/视图的控制器,其中只有一个将利用ActionController::Live模块。但是,一旦包含,AJAX操作(在不相关的页面上)就不再在客户端上呈现。

以下代码可以正常运行:

my_controller.rb:

class MyController < ApplicationController
    def index
        // renders vanilla HTML/JS from index.html.erb
    end

    def update_index
        // renders JavaScript from index.js.erb
    end
end

index.html.erb:

<%= button_to({ controller: :my_controller, action: :update_index},
            remote: true,
            method: 'post') do %>
    Update the text
<% end %> 

<div id='content'>Some content</div>

update_index.js.erb:

$('#content').html('You clicked the button.');

问题: 一旦我将include ActionController::Live添加到控制器,甚至在为服务器端事件创建任何JavaScript或Rails句柄(其工作得很好)之前,我的现有代码就会停止工作。发生以下情况:

  • 服务器查看传入的AJAX请求
  • 所有适当的控制器功能称为
  • JavaScript不在客户端执行。

1 个答案:

答案 0 :(得分:1)

如果您在控制器中包含ActionController::Live,则似乎会更改返回客户端时的默认标题情况。在我的非SSE操作中添加以下行似乎可以解决问题:

response.headers["Content-Type"] = 'text/javascript'

但是我很乐意听到是否有更好的解决方案,或者我是否应该在所有适当的行动中这样做。