3

我有一個簡單的表格提交的圖像,像這樣:的Rails 3.1與最新的jQuery的UJS IE9要保存響應,.js文件

<%= 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,它沒有渲染或respond_to邏輯(它只是調用查找和保存方法),所以默認情況下在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,並沒有任何效果。

正如其他人在其他地方提出的一樣,如果我將內容類型設置爲text/html,IE9不會提示我保存它,但在這種情況下,瀏覽器中沒有實際評估響應中的js(我把js在腳本標記中)。

從搜索似乎大約一年前,其他人遇到同樣的問題,他們的解決方案是升級jquery,因爲一年過去了,我有一個更新的版本。也許這是迴歸?我使用最新的jquery-rails gem,1.0.19,其中包括jquery 1.7.1,並且還包含最新版本的https://github.com/rails/jquery-ujs(我做了一個差異確認)。

回答

1

使用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響應應該在所有瀏覽器中正確評估!