Na minha ação, desejo responder apenas com o processamento se for chamado de uma solicitação AJAX. Como faço para verificar?
Eu quero fazer algo assim:
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
Tempestade de Navalha
fonte
fonte
remote: true
chamadas padrão nas versões mais recentes do Rails, pois os cabeçalhos necessários não são definidos.Se você estiver usando
:remote => true
seus links ou formulários, faça:Você também pode verificar antes do bloco respond_to ligando
request.xhr?
.fonte
$.ajax({dataType: 'html'})
é ajax que responde com HTML. O caminho certo para fazer isso, é o segundo que você mencionourequest.xhr?
Os documentos dizem que request.xhr?
Mas cuidado que
retorna valores numéricos ou nulos, não valores BOOLEAN, como dizem os documentos, de acordo com = ~.
É baseado nisso:
tão
Os documentos:
http://apidock.com/rails/v4.2.1/ActionDispatch/Request/xml_http_request%3F
fonte
nil
será falso.Eu gosto de usar
before_action
filtros. Eles são especialmente agradáveis quando você precisa do mesmo filtro / autorização para várias ações.fonte
se esse retorno 0, significa que é uma solicitação ajax; caso contrário, ele retornará nulo
fonte