Question

J'ai un simple formulaire pour soumettre une image comme ceci:

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

(poignées Dragonfly l'image, dans le cas qui est en quelque sorte pertinent)

Mon action du contrôleur est appelé update_avatar et il n'a pas rendu ou la logique de respond_to (il appelle simplement trouver et enregistrer des méthodes) donc par défaut sur une js demander update_avatar.js.erb est rendue.

update_avatar.js.erb contient une fonction js et $(function () { // some code here })

Dans FF, Chrome et Safari cela fonctionne très bien.

Le problème: IE9 veut sauver la réponse comme avatar.js

En utilisant les outils de développement, je peux voir que la demande est envoyée et reçue correctement et le type de contenu réponse est « text / javascript; charset = utf-8 »

J'ai essayé régler manuellement le type de contenu à l'application / javascript et cela n'a eu aucun effet.

Comme d'autres l'ont suggéré ailleurs, si je mets le type de contenu text / html IE9 ne me invite à enregistrer mais dans ce cas, aucun des navigateurs évaluera réellement les js dans la réponse (je mets les Js balises script).

De la recherche, il semble que environ un an il y a d'autres éprouvaient la même question et leur solution était de mettre à niveau jquery, depuis un an a passé, j'ai une version beaucoup plus récente. Peut-être est une régression?

J'utilise le dernier bijou jquery-rails, 1.0.19, qui comprend jquery 1.7.1 et comprend également la dernière version de https://github.com/rails/jquery-ujs (je l'ai fait un diff pour vous assurer).

Était-ce utile?

La solution

Utilisation de fichier Jquery Télécharger

https://github.com/blueimp/jQuery-File-Upload ( version de base, pas la version UI)

Assurez-vous que l'URL a le format js explicitement indiqué et réglez l'option dataType à 'script':

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

Dans votre contrôleur définir le type de contenu réponse au texte / simple:

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

La réponse js devrait désormais correctement eval dans tous les navigateurs!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top