2011-11-22 11 views
117

私の処置では、AJAXリクエストから呼び出された場合にのみ処理したいと考えています。どうすれば確認できますか?リクエストがAJAXだった場合、Railsが検出します

私はこのような何かをしたい:

def action 
    @model = Model.find(params[:id]) 

    respond_to do |format| 

     if (wasAJAXRequest()) #How do I do this? 

     format.html #action.html.erb 

     else 

     format.html {redirect_to root_url} 
    end 
end 

答えて

233

header[X-Requested-With]がAJAXリクエストかどうかを確認できます。ここでは、それを行う方法について良いarticleです。 =〜に従って、

if request.xhr? 
    # respond to Ajax request 
else 
    # respond to normal request 
end 
15

あなたはあなたがしたいあなたのリンクやフォームで:remote => trueを、使用している場合:

respond_to do |format| 
    format.js { #Do some stuff } 

あなたはまた、respond_to前に確認することができますブロックrequest.xhr?を呼び出してブロックします。

+24

は、Ajaxリクエストは必ずしもJavaScriptで応答する必要はありません。 、 ' $ .ajax({dataType: 'html'}) 'はHTMLで応答するajaxです。これを行う正しい方法は、あなたが 'request.xhr? 'と言った2番目のものです –

0

request.xhr? 

戻り、数値またはゼロの値がないドキュメントなどのブール値の言うことに注意してください:ここで

は一例です。

irb(main):004:0> /hay/ =~ 'haystack' 
=> 0 
irb(main):006:0> /stack/ =~ 'haystack' 
=> 3 
irb(main):005:0> /asfd/ =~ 'haystack' 
=> nil 

それは、これに基づいています:

# File actionpack/lib/action_dispatch/http/request.rb, line 220 
def xml_http_request? 
    @env['HTTP_X_REQUESTED_WITH'] =~ /XMLHttpRequest/ 
end 

ので

env['HTTP_X_REQUESTED_WITH'] =~ /XMLHttpRequest/ => 0 

ドキュメント:

http://apidock.com/rails/v4.2.1/ActionDispatch/Request/xml_http_request%3F

+0

truythyとbooleanの違いは何ですか?どちらも真実/偽ではありませんか? –

+0

Truthyは、 "ブール値"のコンテキストで使用する場合、ブール値ではなくブール値にキャストする必要があることを意味します。上記のenv ['HTTP_X_REQUESTED_WITH'] =〜/ XMLHttpRequest /は0を返します。そして0は実際に真実であり、ルビーでは偽ではありません。0 || 1 => 0しかし、わかりやすくするために投稿を変更します。 – pixelearth

+0

しかし、そのokeyは真実であることを意味します。ゼロは、テキストがインデックス0にあることを意味します。そのため、見つかった(およびその、そしてajaxの要求)。テキストが見つからない場合、結果は 'nil'です。これはfalseです。 –

関連する問題