繁体   English   中英

Rails 3原型渲染:更新响应具有text / html内容类型

[英]Rails 3 prototype render :update response has text/html content-type

我正在尝试使用原型和Rails 2.3.11编写的一些RJS代码在Rails 3.2.1中工作

我有prototype-rails gem,所以render :update do |page| 工作,我正在使用一个表单:remote => true ,它向控制器发送一个ajax请求,并且javascript看起来好像正在生成。

但是,响应标题中的content-type是text/html; charset=utf-8 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.jsrespond_to块中,并将其重写为js.erb文件,但是所有仍然返回text/html作为响应头中的内容类型。

更新我有点弄清楚如何通过在render之前在控制器中添加headers["Content-Type"] = "text/javascript; charset=utf-8"来获得预期的行为,但这看起来并不是最好的如果我必须在每个RJS实例之前明确添加它,那么这样做的方法。 如果有人能想出一个,我想要一个更清洁的解决方案。

更新事实证明,在将content-type设置为text / html的每个请求之前,我们运行了一个before_filter 我删除了这个,并且能够删除我添加的所有headers["Content-Type"]代码。 它在我的开发环境中工作,但在我们的测试验证环境中没有。 结果是我们在那里缓存了旧资产,因此验证运行原型1.6.1,而我的本地开发环境有1.7.0。 这导致rails.js无法在验证中编译,因此所有请求都有一个Accepts: text/html而不是text/javascript 刷新缓存加载了较新版本的原型并修复了问题。

事实证明,我们在每个将content-type设置为text / html的请求之前运行了一个before_filter。 我删除了它,它没有下面的黑客工作。

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

我唯一想要做的就是在render :update之前添加headers["Content-Type"] = "text/javascript; charset=utf-8" 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的代码中的每个地方添加它render :update被调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM