Rails检测请求是否是AJAX

在我的行动中,我只想回应处理,如果它从AJAX请求调用。 我如何检查?

我想要做这样的事情:

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 

你可以检查一个header[X-Requested-With]来查看它是否是一个AJAX请求。 这里有一篇关于如何做的好文章 。

这里是一个例子:

 if request.xhr? # respond to Ajax request else # respond to normal request end 

如果您在链接或表单中使用:remote => true ,那么您应该:

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

您也可以通过调用request.xhr?来检查respond_to块request.xhr?

请注意

 request.xhr? 

返回数字或零值,而不是按照文档所说的BOOLEAN值,按照=〜。

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

它基于这个:

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

所以

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

文档:

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