首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Rails检测请求是否是AJAX

Rails检测请求是否是AJAX
EN

Stack Overflow用户
提问于 2011-11-22 09:01:30
回答 5查看 70.5K关注 0票数 129

在我的操作中,如果处理是从AJAX请求中调用的,我希望只用处理来响应。我该怎么检查?

我想做这样的事情:

代码语言:javascript
复制
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
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-11-22 09:08:38

您可以检查一个header[X-Requested-With],看看它是否是一个AJAX请求。这里有一个关于如何做到这一点的好的article

下面是一个示例:

代码语言:javascript
复制
if request.xhr?
  # respond to Ajax request
else
  # respond to normal request
end
票数 253
EN

Stack Overflow用户

发布于 2011-11-22 09:03:50

如果你在你的链接或表单中使用:remote => true,你会这样做:

代码语言:javascript
复制
respond_to do |format|
  format.js { #Do some stuff }

您还可以通过调用request.xhr?在respond_to块之前进行检查。

票数 15
EN

Stack Overflow用户

发布于 2017-02-02 02:25:07

更新:

在Rails 6.1.0中,xhr?()实际上(最终)返回了一个布尔值。

https://github.com/rails/rails/commit/0196551e6039ca864d1eee1e01819fcae12c1dc9#diff-60b77e427ea7ba142faa477fac10b8d0134cede4e35a3b1953c425200fadf1acL267-L269

原始答案:

医生说request.xhr?

代码语言:javascript
复制
Returns true if the “X-Requested-With” header contains “XMLHttpRequest”....

但要当心

代码语言:javascript
复制
request.xhr? 

根据=~返回数值或nil值,而不是文档中所说的布尔值。

代码语言:javascript
复制
irb(main):004:0> /hay/ =~ 'haystack'
=> 0
irb(main):006:0> /stack/ =~ 'haystack'
=> 3
irb(main):005:0> /asfd/ =~ 'haystack'
=> nil

它是基于这样的:

代码语言:javascript
复制
# File actionpack/lib/action_dispatch/http/request.rb, line 220
def xml_http_request?
  @env['HTTP_X_REQUESTED_WITH'] =~ /XMLHttpRequest/
end

所以

代码语言:javascript
复制
env['HTTP_X_REQUESTED_WITH'] =~ /XMLHttpRequest/  => 0

文档:

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8220701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档