8

3.0.0.beta3で新しいアプリを作成しています。次のアクション(publications_controller.rb内)のAjaxリクエストにjs.erbテンプレートをレンダリングしようとしています。

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/javascript」ではなく「text/html」であるためです。

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

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 に答える
0

同じ問題が発生し、コントローラーにcontent_typeというメソッドを作成しました。これは、デフォルトをオーバーライドしていました。

于 2013-11-16T01:02:40.457 に答える