W mojej akcji chcę odpowiedzieć przetwarzaniem tylko wtedy, gdy zostało wywołane z żądania AJAX. Jak to sprawdzić?
Chcę zrobić coś takiego:
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
źródło
źródło
remote: true
wywołań w nowszych wersjach Railsów, ponieważ niezbędne nagłówki nie są ustawiane.Jeśli używasz
:remote => true
w swoich linkach lub formularzach, zrobiłbyś:Możesz również sprawdzić przed blokiem respond_to dzwoniąc
request.xhr?
.źródło
$.ajax({dataType: 'html'})
to Ajax, który odpowiada za pomocą HTML. Właściwy sposób, aby to zrobić, to drugi, o którym wspomniałeśrequest.xhr?
Doktorzy mówią, że request.xhr?
Ale UWAŻAJ na to
zwraca wartości numeryczne lub zerowe, a nie wartości typu BOOLEAN, jak mówią dokumentacja, zgodnie z = ~.
Opiera się na tym:
więc
Dokumenty:
http://apidock.com/rails/v4.2.1/ActionDispatch/Request/xml_http_request%3F
źródło
nil
jest fałsz.Lubię używać
before_action
filtrów. Są szczególnie przydatne, gdy potrzebujesz tego samego filtru / autoryzacji do wielu działań.źródło
jeśli to zwróci 0, oznacza to, że jest to żądanie AJAX, w przeciwnym razie zwróci nil
źródło