4

我试图让与原型和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。冲洗缓存加载了较新版本的原型并解决了问题。

回答

1

事实证明,我们有当时正在每个请求设置内容类型为text/html之前运行的before_filter。我删除了它,并且它没有下面的破解。

但是如果你需要一个解决办法,这就是我下面做。

我弄清楚,使这项工作的唯一的事情是以前的render :update

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被称为代码添加在每个地方加入headers["Content-Type"] = "text/javascript; charset=utf-8"

+0

我将此标记为最佳答案。如果有人提供了一个我可以验证的更清晰的解决方案,我会很乐意标记他们的。 – keithepley 2012-04-02 21:15:46

+0

原来,在我们的测试验证环境中,仅在我的本地开发环境中无法正常工作,因此取消了最佳答案。仍然需要一种方法来修复它 – keithepley 2012-06-14 16:45:39

+0

现在修复它。原来这不是代码,而是一个旧的'prototype.js'资产被缓存在验证中。刷新允许'rails.js'正确编译,并且客户端开始请求'text/javascript'而不是'text/html' – keithepley 2012-06-15 15:56:58