Dans mon action, je souhaite uniquement répondre avec un traitement s'il a été appelé à partir d'une requête AJAX. Comment vérifier?
Je veux faire quelque chose comme ça:
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
ruby-on-rails
ajax
Razor Storm
la source
la source
remote: true
appels standard dans les nouvelles versions de Rails, car les en-têtes nécessaires ne sont pas définis.Si vous utilisez
:remote => true
dans vos liens ou formulaires, vous feriez:Vous pouvez également vérifier avant le bloc respond_to en appelant
request.xhr?
.la source
$.ajax({dataType: 'html'})
c'est ajax qui répond avec HTML. La bonne façon de faire est la deuxième que vous avez mentionnéerequest.xhr?
Les documents disent que request.xhr?
Mais attention
renvoie des valeurs numériques ou nulles et non des valeurs BOOLEAN comme le disent les documents, conformément à = ~.
C'est basé sur ceci:
alors
Les docs:
http://apidock.com/rails/v4.2.1/ActionDispatch/Request/xml_http_request%3F
la source
nil
est faux.J'aime utiliser des
before_action
filtres. Ils sont particulièrement utiles lorsque vous avez besoin du même filtre / autorisation pour plusieurs actions.la source
si ce retourne 0 alors cela signifie que c'est une requête ajax, sinon il retournera nil
la source