복붙노트

[RUBY-ON-RAILS] 요청이 AJAX 인 경우 레일 감지

RUBY-ON-RAILS

요청이 AJAX 인 경우 레일 감지

이 Ajax 요청에서 호출 된 경우 내 행동에서 나는 처리에만 응답하고 싶습니다. 어떻게 확인합니까?

나는 이런 일을하고 싶지 :

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

해결법

  1. ==============================

    1.당신은 헤더를 확인할 수 있습니다 [X는-요청-으로] 그것이 AJAX 요청 있는지. 여기에 그것을 수행하는 방법에 대한 좋은 기사입니다.

    당신은 헤더를 확인할 수 있습니다 [X는-요청-으로] 그것이 AJAX 요청 있는지. 여기에 그것을 수행하는 방법에 대한 좋은 기사입니다.

    다음은 그 예이다 :

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

    2.당신이 사용하는 경우 : 원격 => 당신의 연결 또는 양식에 사실, 당신이 할 것입니다 :

    당신이 사용하는 경우 : 원격 => 당신의 연결 또는 양식에 사실, 당신이 할 것입니다 :

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

    또한 request.xhr를 호출하여 respond_to 블록 전에 확인할 수 있습니다?

  3. ==============================

    3.워드 프로세서는 request.xhr 말?

    워드 프로세서는 request.xhr 말?

    Returns true if the “X-Requested-With” header contains “XMLHttpRequest”....
    

    그러나 조심

    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

  4. ==============================

    4.나는 before_action 필터를 사용하여 좋아한다. 여러 작업에 대해 동일한 필터 / 허가를 필요로 할 때 그들은 특히 좋은입니다.

    나는 before_action 필터를 사용하여 좋아한다. 여러 작업에 대해 동일한 필터 / 허가를 필요로 할 때 그들은 특히 좋은입니다.

    class MyController < AuthController
      before_action :require_xhr_request, only: [:action, :action_2]
    
      def action
        @model = Model.find(params[:id])
      end
    
      def action_2
        # load resource(s)
      end
    
      private
    
      def require_xhr_request
        redirect_to(root_url) unless request.xhr?
      end
    end
    
  5. ==============================

    5.

    request.xhr? 
    

    이 반환 0 다음은 아약스 요청을 의미하는 경우, 다른 사람이 전무를 반환합니다

  6. from https://stackoverflow.com/questions/8220701/rails-detect-if-request-was-ajax by cc-by-sa and MIT license