Rails erkennen, ob die Anfrage AJAX war

  • In meiner Aktion möchte ich nur mit der Verarbeitung antworten, wenn sie von einer AJAX-Anforderung aufgerufen wurde. Wie überprüfe ich?

    Ich möchte Folgendes tun:

     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
     
    08 February 2014
    tereškoArkiliknam
3 answers
  • Sie können nach header[X-Requested-With] suchen, um zu sehen, ob es sich um eine AJAX-Anfrage handelt. Hier finden Sie einen guten Artikel zum Vorgehen es.

    Hier ein Beispiel:

     if request.xhr?
      # respond to Ajax request
    else
      # respond to normal request
    end
     
    10 July 2015
    Amir Raminfar
  • Wenn Sie :remote => true in Ihren Links oder Formularen verwenden, tun Sie Folgendes:

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

    Sie können auch vor dem respons_to-Block prüfen, indem Sie request.xhr?.

    aufrufen
    22 November 2011
    Sean Hill
  • Beachten Sie, dass

     request.xhr? 
     

    numerische oder keine Werte zurückgibt und keine BOOLEAN-Werte, wie in den Dokumenten angegeben , in Übereinstimmung mit = ~.

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

    Sie basiert darauf:

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

    so

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

    Die Dokumente:

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

    24 August 2017
    pixelearth