2017-10-25 6 views
0

私はこのresponse_toブロックを持っています。これはparamが存在すると "format.js"が起動し、そうでなければ "format.html"が起動します。私の問題はこれです。ユーザーがリンクをクリックしてからajaxレスポンスを呼び出すまで、パラメータは最初は存在しません。修正のようですJQuery posting form via AJAX not triggering rails respond_to format.jsが、私はそれが動作する理由を理解していないような理由: respond_toブロックのFormat.jsは条件付きフォーマットでは機能しません

respond_to do |format| 
    if params[:tab_id].present? 
    format.js 
    else 
    format.html 
    end 
end 

が、私はこの記事を見つけた:ここ

はブロックです。私の問題では、 "format.html"は、ページが読み込まれるときに常に最初に表示されます。ユーザーがリンクをクリックしてパラメータを表示するときに「format.js」が発生するように修正するにはどうすればよいですか?

答えて

0

応答の形式は、Acceptヘッダーと要求パス上の形式(.jsまたは.htmlなど)の存在によって決まります。

format.jsは、railsが要求がJSのものであると判断した場合にのみ実行されます。 Railsのデフォルトはformat.htmlです。このためにparamを使用しようとすると、良いアイデアではありません。

これらは、MIMEタイプはRails recognize as jsです:

Mime::Type.register "text/javascript", :js, %w(application/javascript application/x-javascript) 

は、JSのためのAJAXリクエストを送信するには、このように実行する必要があります。

var promise = $.ajax('/somepath.js'); 
// or 
var promise = $.ajax('/somepath', { 
    dataType: "text/javascript" // or just "script" 
}); 
関連する問題