8

我正在使用 3.0.0.beta3 构建一个新应用程序。我只是尝试将 js.erb 模板呈现给 Ajax 请求以执行以下操作(在 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

目前,我的 get_pubmed_data.js.erb 模板很简单

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

服务器响应如下

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

除了浏览器中没有任何事情发生外,这完全没问题,可能是因为响应的内容类型是“text/html”而不是“text/javascript”,如此处部分复制的响应标头所示:

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

这是一个错误还是我错过了什么?谢谢你的帮助!

4

4 回答 4

10

我终于能够通过强制它在响应中获得正确的内容类型:

respond_to do |format|
    format.js {render :content_type => 'text/javascript'}
end
于 2010-04-30T08:01:09.630 回答
1

在 Rails 3.1.1 中,我遇到了类似的问题。即使我在控制器中明确提到了 format.js,我的响应也会呈现为 html。事实证明,问题在于我的资产中有 jquery.js 文件并被模板加载。jquery-rails 使用它自己的 jquery 副本并且加载这些文件会导致 rails 出于某种原因将响应呈现为 html。可能会帮助其他人解决这个问题。

于 2011-12-05T07:42:27.367 回答
0

我遇到了同样的问题,结果我在控制器上创建了一个名为 content_type 的方法,它覆盖了默认值。

于 2013-11-16T01:02:40.457 回答
0

有一个类似的问题,js文件将作为文本文件加载,但最后只是我的脚本以错误的顺序加载。

代替

<%= javascript_include_tag :all %>

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

还要注意,getscript 方法

即替换:

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

和:

onClick="$.getScript('<%= escape_javascript(get_pubmed_data_path(:format => :js)) %>');"
于 2010-09-21T21:22:26.110 回答