在我的操作中,如果处理是从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
发布于 2011-11-22 09:08:38
您可以检查一个header[X-Requested-With]
,看看它是否是一个AJAX请求。这里有一个关于如何做到这一点的好的article。
下面是一个示例:
if request.xhr?
# respond to Ajax request
else
# respond to normal request
end
发布于 2011-11-22 09:03:50
如果你在你的链接或表单中使用:remote => true
,你会这样做:
respond_to do |format|
format.js { #Do some stuff }
您还可以通过调用request.xhr?
在respond_to块之前进行检查。
发布于 2017-02-02 02:25:07
更新:
在Rails 6.1.0中,xhr?()
实际上(最终)返回了一个布尔值。
原始答案:
医生说request.xhr?
Returns true if the “X-Requested-With” header contains “XMLHttpRequest”....
但要当心
request.xhr?
根据=~返回数值或nil值,而不是文档中所说的布尔值。
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
https://stackoverflow.com/questions/8220701
复制相似问题