2010-04-29 7 views
8

Ich baue eine neue App mit 3.0.0.beta3. Ich versuche einfach eine js.erb Vorlage einer Ajax-Anforderung für die folgende Aktion (in publications_controller.rb) zu machen:Rails3 rendert eine js.erb Vorlage mit einem text/html Inhaltstyp anstelle von 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 

Derzeit meine get_pubmed_data.js.erb Vorlage ist einfach

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

der Server antwortet mit den folgenden

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

, die völlig in Ordnung ist, außer, dass nichts im Browser passieren, wahrscheinlich, weil die Content-Type der Antwort ist ‚text/html‘ inst ead von ‚text/javascript‘, wie durch die Antwort-Header gezeigt teilweise hier wiedergegeben:

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

Ist das ein Bug oder bin ich etwas fehlt? Danke für Ihre Hilfe!

+0

Wie nennt man 'get_pubmed_data'? In Rails 3 müssen Sie folgendes tun: '<% = link_to 'Klicken Sie hier',: controller =>: publications,: action =>: get_pubmed_data,: remote => true%>' – Mischa

+0

Der Aufruf von get_pubmed_data ist in Ordnung eine JavaScript-Funktion observe_field, mit der richtigen '-Requested-With \t XMLHttpRequest'request Header – Yannis

Antwort

9

konnte ich endlich den richtigen Content-Type in der Antwort, indem sie es mit zwingt bekommen:

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

hatte ein ähnliches Problem, wo die js-Datei als Textdatei laden würde, aber am Ende ist es waren nur meine Scrits, die in der falschen Reihenfolge geladen wurden.

ersetzen

<%= javascript_include_tag :all %> 

mit

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

Auch die getScript Methode beachten

dh ersetzen:

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

mit:

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

Großartig, ich werde das morgen in erster Linie versuchen ... – Yannis

+0

Nun, es hat nicht funktioniert. Immer noch meine js.erb Vorlage im Layout eingebettet. – Yannis

+0

Das einzige, was ich sehen kann, ist, dass Sie die Rails upgraden möchten (vorausgesetzt, Sie verwenden immer noch beta3). Mit Rails 3.0.0 funktioniert es für mich. Viel Glück! – montrealmike

1

Mit Rails 3.1.1 Ich stieß auf ein ähnliches Problem. Meine Antwort würde als HTML rendern, obwohl ich format.js explizit in meinem Controller erwähnt hatte. Es stellte sich heraus, dass das Problem darin bestand, dass ich jquery.js-Dateien in meinen Assets hatte und von der Vorlage geladen wurde. jquery-rails benutzt eine eigene Kopie von jquery und diese geladenen Dateien haben auch dazu geführt, dass rails die Antwort aus irgendwelchen Gründen als html rendern. Könnte jemand anderen bei diesem Problem helfen.

+0

Wie hast du das behoben? Ich habe das gleiche Problem und egal, in welcher Reihenfolge ich es lade, ist etwas kaputt. – prater

0

Ich hatte das gleiche Problem und es stellte sich heraus, dass ich eine Methode namens content_type auf meinem Controller erstellt, die den Standard überschrieben wurde.

Verwandte Themen