views:

850

answers:

2

Hi, I'm building a new app with 3.0.0.beta3. I simply try to render a js.erb template to an Ajax request for the following action (in publications_controller.rb):

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

Currently, my get_pubmed_data.js.erb template is simply

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

The server is responding with the following

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

which is perfectly fine except that nothing happen in the browser, probably because the content-type of the response is 'text/html' instead of 'text/javascript' as shown by the response header partially reproduced here:

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

Is this a bug or am I missing something? Thanks for your help!

A: 

I finally was able to get the right content-type in the response by forcing it with:

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

had a similar problem where the js file would load as a text file, but in the end it was just my scrits which were loading in the wrong order.

replace

<%= javascript_include_tag :all %>

with

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

Also to note, the getscript method

ie replace:

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

with:

onClick="$.getScript('<%= get_pubmed_data_path(:format => :js) %>');"
Great, I'll try that tomorrow in the first place…
Yannis
Well, it didn't work. Still getting my js.erb template embeded in layout.
Yannis