我有一个简单的表格,用于提交类似的图像:

<%= form_tag avatar_item_path(@tutorial, :format => :js), :method => :post, :remote => true do %>
  <%= file_field_tag :item_avatar, :name => "item_image[image]" %>
<% end %>

(蜻蜓可以处理图像,以防万一相关)

我的控制器操作称为update_avatar,它没有渲染或响应逻辑(它只是调用并保存方法),因此默认情况下呈现JS请求update_avatar.js.erb上的默认情况。

update_avatar.js.erb包含JS功能, $(function () { // some code here })

在FF,Chrome和Safari中,这可以正常工作。

问题: IE9想要将响应保存为avatar.js

使用开发人员工具,我可以看到请求是正确发送和接收的,并且响应内容类型为“ text/javaScript; charset = utf-8”

我已经尝试将内容类型设置为应用程序/JavaScript,但这没有效果。

正如其他人在其他地方建议的那样,如果我将内容类型设置为文本/HTML IE9不会提示我保存它,但是在这种情况下,没有任何浏览器实际上会在响应中评估JS(我将JS放在脚本标签中) 。

从搜索开始,大约一年前,其他人也经历了同样的问题,他们的解决方案是升级jQuery,因为一年过去了,我有一个更新的版本。也许这是回归?

我正在使用最新的jQuery-Rails Gem,1.0.19,其中包括jQuery 1.7.1,还包括最新版本的 https://github.com/rails/jquery-ujs (我做了一个差异来确保)。

有帮助吗?

解决方案

使用jQuery文件上传

https://github.com/blueimp/jquery-file-upload (基本版本,不是UI版本)

确保URL具有明确说明的JS格式,并将数据类型选项设置为“脚本”:

$('#item_avatar').fileupload({
  url: "<%= avatar_item_path(item, :format => :js) %>",
  dataType: 'script'
});

在您的控制器中,将响应内容类型设置为文本/平原:

respond_to do |format|
  format.js { render :content_type => "text/plain" } # needed for IE
end

JS响应现在应在所有浏览器中正确评估!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top