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