在respond_to块的JS部分中返回HTML会在IE中引发错误

Tom*_*man 7 ajax internet-explorer content-type ruby-on-rails

这是我的控制器操作中的常见模式:

respond_to do |format|
  format.html {}
  format.js {
    render :layout => false
  }
end
Run Code Online (Sandbox Code Playgroud)

即,如果请求是非AJAX,我将在一个全新的页面上以布局发送HTML内容.如果请求 AJAX,我将发送相同的内容,但没有布局(以便它可以插入现有页面或放入灯箱或其他).

所以我总是在format.js部分中返回HTML ,但Rails将Content-Type响应头设置为text/javascript.这会导致IE抛出这个有趣的小错误消息:

alt text http://dl.dropbox.com/u/2792776/screenshots/Screen%20shot%202010-02-25%20at%205.13.49%20PM.png

当然,我每次都可以设置响应的内容类型(或使用after_filter或者其他),但似乎我正在尝试做一些相对标准的事情,我不想添加额外的样板代码.

我该如何解决这个问题?或者,如果解决问题的唯一方法是更改​​响应的内容类型,那么实现我想要的行为的最佳方式是什么(即,向下发送非AJAX布局的内容以及没有布局的相同内容对于AJAX)而不必处理这些错误?

编辑: 此博客文章有更多信息

Ram*_*ils 6

这对你有用吗?

respond_to do |format|
  format.html { :layout => false if request.xhr? }
  format.js {}
end
Run Code Online (Sandbox Code Playgroud)

然后将响应称为HTML,而不是JS(我还没有测试过.)

基本上,request.xhr?是这个解决方案的关键


nan*_*nda 0

IE 无法将响应理解为 HTML。因此,要么更改响应的标头,要么测试将请求方法更改为 GET。