2010-04-29 5 views
8

Sto costruendo una nuova app con 3.0.0.beta3. Ho semplicemente cerco di rendere un modello js.erb ad una richiesta Ajax per la seguente azione (in publications_controller.rb):Rails3 esegue il rendering di un modello js.erb con un tipo di contenuto text/html invece di text/javascript

def get_pubmed_data 
    entry = Bio::PubMed.query(params[:pmid])# searches PubMed and get entry 
    @publication = Bio::MEDLINE.new(entry) # creates Bio::MEDLINE object from entry text 
    flash[:warning] = "No publication found."if @publication.title.blank? and @publication.authors.blank? and @publication.journal.blank?  
    respond_to do |format| 
     format.js 
    end 
end 

Attualmente, il mio modello get_pubmed_data.js.erb è semplicemente

alert('<%= @publication.title %>') 

il server risponde con il seguente

alert('Evidence for a herpes simplex virus-specific factor controlling the transcription of deoxypyrimidine kinase.') 

che è perfettamente bene, tranne che nulla accada nel browser, probabilmente perché il tipo di contenuto della risposta è '/ html testo' inst ead di 'text/javascript' come dimostra l'intestazione di risposta parzialmente riprodotto qui:

Status 200 
Keep-Alive timeout=5, max=100 
Connection Keep-Alive 
Transfer-Encoding chunked 
Content-Type text/html; charset=utf-8 

Si tratta di un bug o mi sto perdendo qualcosa? Grazie per l'aiuto!

+0

Come si chiama 'get_pubmed_data'? In Rails 3 devi fare: '<% = link_to 'Clicca qui',: controller =>: publications,: action =>: get_pubmed_data,: remote => true%>' – Mischa

+0

La chiamata a get_pubmed_data va bene, fatta attraverso una funzione javascript observ_field, con la destra '-Requested-With \t XMLHttpRequest'request Headers – Yannis

risposta

9

ho finalmente stato in grado di ottenere il giusto tipo di contenuto nella risposta forzando con:

respond_to do |format| 
    format.js {render :content_type => 'text/javascript'} 
end 
0

avuto un problema simile in cui il file js caricherebbe come file di testo, ma alla fine erano solo i miei scrit che stavano caricando nell'ordine sbagliato.

sostituire

<%= javascript_include_tag :all %> 

con

<%= javascript_include_tag "jquery.min" %> 
<%= javascript_include_tag "jquery-ui.min" %> 
<%= javascript_include_tag "rails" %> 

inoltre notare, il metodo getScript

cioè sostituire:

onClick="<%= get_pubmed_data_path(:format => :js) %>" 

con:

onClick="$.getScript('<%= escape_javascript(get_pubmed_data_path(:format => :js)) %>');" 
+0

Grande, ci provo domani in primo luogo ... – Yannis

+0

Beh, non ha funzionato. Sto ancora ottenendo il mio modello js.erb incorporato nel layout. – Yannis

+0

l'unica cosa che posso vedere è che potresti voler aggiornare i binari (supponendo che tu stia ancora utilizzando la versione beta3). Con Rails 3.0.0 funziona per me. In bocca al lupo! – montrealmike

1

Con Rails 3.1.1 Ho riscontrato un problema simile. La mia risposta verrebbe visualizzata come html anche se avevo esplicitamente menzionato format.js nel mio controller. Risulta che il problema era che avevo i file jquery.js nelle mie risorse e venivano caricati dal modello. jquery-rails utilizza la propria copia di jquery e avendo questi file caricati anche i binari ha causato il rendering della risposta in html per qualche motivo. Potrebbe aiutare qualcun altro a risolvere questo problema.

+0

come hai risolto questo problema? ho lo stesso problema e non importa quale ordine lo carico, qualcosa è rotto. – prater

0

Ho avuto lo stesso problema e ho scoperto che ho creato un metodo chiamato content_type sul mio controller che sovrascriveva quello predefinito.