带有最新jQuery-ujs IE9的Rails 3.1希望将响应保存为.js
-
25-10-2019 - |
题
我有一个简单的表格,用于提交类似的图像:
<%= 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响应现在应在所有浏览器中正确评估!