ruby on rails - not - Los rieles detectan si la solicitud fue AJAX
rails-ujs (3)
En mi acción, solo deseo responder con el procesamiento si fue llamado desde una solicitud de AJAX. ¿Cómo lo verifico?
Quiero hacer algo como esto:
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
Puede verificar un header[X-Requested-With]
para ver si se trata de una solicitud AJAX. Aquí hay un buen article sobre cómo hacerlo.
Aquí hay un ejemplo:
if request.xhr?
# respond to Ajax request
else
# respond to normal request
end
Sé consciente de
request.xhr?
devuelve valores numéricos o nulos, no valores BOOLEAN, como dicen los documentos, de acuerdo con = ~.
irb(main):004:0> /hay/ =~ ''haystack''
=> 0
irb(main):006:0> /stack/ =~ ''haystack''
=> 3
irb(main):005:0> /asfd/ =~ ''haystack''
=> nil
Está basado en esto:
# File actionpack/lib/action_dispatch/http/request.rb, line 220
def xml_http_request?
@env[''HTTP_X_REQUESTED_WITH''] =~ /XMLHttpRequest/
end
asi que
env[''HTTP_X_REQUESTED_WITH''] =~ /XMLHttpRequest/ => 0
Los documentos:
http://apidock.com/rails/v4.2.1/ActionDispatch/Request/xml_http_request%3F
Si está utilizando :remote => true
en sus enlaces o formularios, haría:
respond_to do |format|
format.js { #Do some stuff }
También puede consultar antes del bloque responder_ a llamando a request.xhr?
.