我正在尝试将使用原型和Rails 2.3.11编写的一些RJS代码在Rails 3.2.1中运行。 我已经使用了
看起来生成
我是否有做错的事情会导致这种情况? 我需要一个能使rjs与原型一起使用的解决方案。 未来可能会使用jQuery,但现在不能进行更改。
更新:我尝试了几种其他编写代码的方法,包括在
更新:我通过在控制器中添加
更新:原来我们在每个请求之前都运行了一个
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"
,用respond_to
块和format.js
包装它,并将其重写为js.erb
文件,但仍然返回响应头中的text/html
作为内容类型。更新:我通过在控制器中添加
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
。 刷新该缓存加载了更新的原型版本并解决了问题。
prototype.js
资源在验证中被缓存了。刷新后,rails.js
能够正确编译,并且客户端开始请求text/javascript
而不是text/html
。 - keithepley