質問

次のような画像を送信するための簡単なフォームがあります:

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

(Dragonflyは、何らかの形で関連性がある場合に備えて画像を処理します)

私のコントローラーのアクションはupdate_avatarと呼ばれ、renderまたはrespons_to logic(検索と保存のメソッドを呼び出すだけ)がないため、js request update_avatar.js.erbがレンダリングされます。

update_avatar.js.erbには、js関数が含まれています $(function () { // some code here })

FF、ChromeとSafariではこれが正常に機能します。

問題: IE9は、Avatar.jsとして応答を保存したいと考えています

開発者ツールを使用して、リクエストが正しく送信および受信され、応答コンテンツタイプが「テキスト/javaScript; charset = utf-8」であることがわかります。

コンテンツタイプをアプリケーション/JavaScriptに手動で設定しようとしましたが、これは効果がありませんでした。

他の人が他の場所で提案したように、コンテンツタイプをテキスト/HTMLに設定した場合、IE9はそれを保存するように促されませんが、この場合、ブラウザは実際にJSを応答で評価しません(スクリプトタグにJSを配置します) 。

検索から、約1年前に他の人が同じ問題を経験していたようで、彼らの解決策はjQueryをアップグレードすることでした。おそらくこれは回帰ですか?

jquery 1.7.1を含む最新のjquery-rails gem、1.0.19を使用しており、最新バージョンも含まれています。 https://github.com/rails/jquery-ujs (私は確かにdiffをしました)。

役に立ちましたか?

解決

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