我试图让与原型和Rails 2.3.11写了一些RJS代码Rails的工作3.2.1Rails 3的原型渲染:更新响应已text/html的内容类型
我有prototype-rails
宝石,所以render :update do |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
它似乎产生window.location.href...
和Element.update...
代码确定,但不执行,因为内容类型是错误的。
有没有什么我可能做错了,可能会导致这种情况?我需要一个解决方案,使原型工作rjs。 jQuery将来可能会被使用,但现在做出这种改变不是一种选择。
更新: 我试着写代码,包括render
指定:content_type => "text/javascript"
,与format.js
它包裹在一个respond_to
块,并且将其重写为js.erb
文件的一些其他方法,但都仍然与回归text/html
作为响应头中的内容类型。
更新 我有点想出如何在render
之前控制器增加headers["Content-Type"] = "text/javascript; charset=utf-8"
得到预期的行为,但是这并没有真正看起来做的最好的方式,如果我要补充一点明确之前每个RJS实例。如果有人能拿出一个,我想要一个更清洁的解决方案。
更新 事实证明,我们有一个before_filter
这是设置内容类型为text/html每一个请求之前运行。我删除了这个,并且能够删除我添加的所有headers["Content-Type"]
代码。它在我的开发环境中工作,但不在我们的测试验证环境中。原来,我们将旧资产缓存在那里,因此验证运行的是原型1.6.1,而我的本地开发环境为1.7.0。这导致rails.js
不能在验证中编译,因此所有请求都有Accepts: text/html
而不是text/javascript
。冲洗缓存加载了较新版本的原型并解决了问题。
我将此标记为最佳答案。如果有人提供了一个我可以验证的更清晰的解决方案,我会很乐意标记他们的。 – keithepley 2012-04-02 21:15:46
原来,在我们的测试验证环境中,仅在我的本地开发环境中无法正常工作,因此取消了最佳答案。仍然需要一种方法来修复它 – keithepley 2012-06-14 16:45:39
现在修复它。原来这不是代码,而是一个旧的'prototype.js'资产被缓存在验证中。刷新允许'rails.js'正确编译,并且客户端开始请求'text/javascript'而不是'text/html' – keithepley 2012-06-15 15:56:58