Domanda

Ho una forma semplice per la presentazione di un'immagine in questo modo:

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

(Dragonfly gestisce l'immagine, nel caso in cui in qualche modo rilevante)

La mia azione di controllo si chiama update_avatar e non ha il rendering o logica respond_to (si chiama semplicemente trovare e salvare i metodi) in modo di default su un JS richiedere update_avatar.js.erb è resa.

update_avatar.js.erb contiene un JS funzionano e $(function () { // some code here })

In FF, Chrome e Safari questo funziona bene.

Il problema: IE9 vuole salvare la risposta come avatar.js

Utilizzando gli strumenti di sviluppo posso vedere che la richiesta viene inviato e ricevuto correttamente e il tipo di contenuto di risposta è "text / javascript; charset = utf-8"

Ho provato manualmente l'impostazione del tipo di contenuto a application / javascript e questo non ha avuto effetto.

Come altri hanno suggerito altrove, se ho impostato il tipo di contenuto a text / html IE9 non sarà pronta me per salvarlo ma in questo caso nessuno dei browser sarà effettivamente valutare le js nella risposta (ho messo i js in tag script).

Da ricerca sembra che circa un anno fa, altri sono stati vivendo lo stesso problema e la loro soluzione era quella di aggiornare jquery, dal momento che un anno è passato Ho una versione molto più recente. Forse questa è una regressione?

Sto usando l'ultimo jquery-rails gemma, 1.0.19, che include jQuery 1.7.1 e include anche l'ultima versione di https://github.com/rails/jquery-ujs (ho fatto un diff per essere sicuri).

È stato utile?

Soluzione

Utilizzando File Upload Jquery

https://github.com/blueimp/jQuery-File-Upload ( versione base, non la versione UI)

Assicurarsi che l'url è il formato js esplicitamente dichiarato e impostare l'opzione dataType di 'script':

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

Nel vostro controller impostare il tipo di contenuto risposta a text / plain:

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

La risposta js dovrebbe ora correttamente eval in tutti i browser!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top