Javascript Rails3原型呈现:更新响应具有文本/html内容类型

Javascript Rails3原型呈现:更新响应具有文本/html内容类型,javascript,ruby-on-rails-3,prototypejs,content-type,ruby-on-rails-3.2,Javascript,Ruby On Rails 3,Prototypejs,Content Type,Ruby On Rails 3.2,我正在尝试使用prototype和Rails2.3.11编写一些RJS代码,以便在Rails3.2.1中工作 我有prototype railsgem,因此render:updatedo | page |可以工作,我使用了一个带有:remote=>true的表单,它向控制器发送一个ajax请求,javascript看起来生成得不错 但是,响应标题中的内容类型是text/html;charset=utf-8,应该是text/javascript 在控制器中,我这样称呼它: render :upda

我正在尝试使用prototype和Rails2.3.11编写一些RJS代码,以便在Rails3.2.1中工作

我有
prototype rails
gem,因此
render:updatedo | page |
可以工作,我使用了一个带有
:remote=>true的表单,它向控制器发送一个ajax请求,javascript看起来生成得不错

但是,响应标题中的内容类型是
text/html;charset=utf-8
,应该是
text/javascript

在控制器中,我这样称呼它:

render :update do |page|
    if @step.errors.empty?
        page.redirect_to how_to_path(@article.id)
    else
        page.replace_html 'add_step_form', :partial => 'how_to/add_step', :locals => {:step => @step, :altered => true}
    end
end
它似乎生成了
窗口.location.href…
元素.update…
代码ok,但由于内容类型错误,它没有执行

是不是我做错了什么导致了这一切?我需要一个解决方案,将使rjs与原型工作。jQuery将来可能会被使用,但现在进行更改不是一个选项

更新: 我尝试了其他几种编写代码的方法,包括在
render
中指定
:content\u type=>“text/javascript”
,用
format.js
将其包装在
respond\u to
块中,并将其重写为
js.erb
文件,但是所有的响应仍然返回
text/html
作为响应头中的内容类型

更新 通过在
呈现之前在控制器中添加
标题[“Content Type”]=“text/javascript;charset=utf-8”
,我大致了解了如何获得预期的行为,但如果我必须在每个RJS实例之前显式添加,这似乎不是最好的方法。如果有人能想出一个更干净的解决方案,我想要一个

更新
事实证明,在将内容类型设置为text/html的每个请求之前,都会运行一个
before\u filter
。我删除了这个,并且能够删除我添加的所有
标题[“Content Type”]
代码。它在我的开发环境中工作,但在我们的测试验证环境中不起作用。事实证明,我们在那里缓存了旧资产,所以验证运行的是prototype 1.6.1,而我的本地开发环境运行的是prototype 1.7.0。这导致
rails.js
无法在验证中编译,因此所有请求都有一个
Accepts:text/html
而不是
text/javascript
。刷新该缓存加载了较新版本的prototype并修复了该问题

事实证明,在每个请求将内容类型设置为text/html之前,都会运行一个before_过滤器。我删除了它,它在没有下面的黑客攻击的情况下工作

但如果你需要一个解决办法,下面是我所做的

我唯一想做的就是在
呈现:更新之前添加
标题[“Content Type”]=“text/javascript;charset=utf-8”

headers["Content-Type"] = "text/javascript; charset=utf-8"
render :update do |page|
  if @step.errors.empty?
    page.redirect_to how_to_path(@article.id)
  else
    page.replace_html 'add_step_form', :partial => 'how_to/add_step', :locals => {:step => @step, :altered => true}
  end
end

不幸的是,我不得不在调用RJS
render:update
的代码中的每个地方添加它。

我将此标记为最佳答案。如果有人有一个我可以验证的更干净的解决方案,我会很高兴地标记他们的解决方案。事实证明,它在我们的测试验证环境中不起作用,只在我的本地开发环境中起作用,所以最好的答案是不加标记的。仍然需要一种方法来修复它现在就修复它。原来不是代码,而是验证中缓存的一个旧的
prototype.js
资产。刷新允许
rails.js
正确编译,客户端开始请求
text/javascript
而不是
text/html