2011-11-22 2 views
117

제 조치에서 AJAX 요청에서 처리 된 경우에만 처리하고 싶습니다. 확인하려면 어떻게해야합니까?요청이 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 ({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

하지만 그 오키는 진실이어야합니다. 0은 텍스트가 인덱스 0에서 발견된다는 것을 의미합니다. 따라서 해당 텍스트는 발견되었습니다 (및 해당 및 아약스 요청). 텍스트가 발견되지 않으면 결과는'nil'이며 false입니다. –

관련 문제