2011-11-22 68 views
117

在我的操作中,如果從AJAX請求中調用該操作,我希望只處理該請求。我如何檢查?Rails檢測請求是否爲AJAX

我想做的事情是這樣的:如果你使用你的鏈接或表單:remote => true

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

,你會怎麼做:

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

您還可以在respond_to代碼前檢查通過呼叫request.xhr?來阻止。

+24

一個Ajax請求並不一定要使用JavaScript響應,' $ .ajax({dataType:'html'})'是用HTML響應的ajax。正確的做法是,你提到的第二個'request.xhr?' –

0

注意

request.xhr? 

返回數值或零值不BOOLEAN值作爲文檔說,按照=〜。

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不爲false。而0實際上是真實的,而不是在紅寶石中的虛假:0 || 1 => 0但爲了清晰起見,我會改變我的帖子。 – pixelearth

+0

但它的關鍵是truthy,零意味着文本被找到索引0,所以它的發現(和它的和ajax請求)。如果沒有找到文本,結果是'nil',這是錯誤的。 –