Raz*_*orm 123 ajax ruby-on-rails
在我的操作中,我希望只响应处理,如果它是从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
Run Code Online (Sandbox Code Playgroud)
Ami*_*far 245
您可以检查header[X-Requested-With]是否是AJAX请求.这是一篇关于如何做的好文章.
这是一个例子:
if request.xhr?
# respond to Ajax request
else
# respond to normal request
end
Run Code Online (Sandbox Code Playgroud)
Sea*_*ill 14
如果您:remote => true在链接或表单中使用,则可以:
respond_to do |format|
format.js { #Do some stuff }
Run Code Online (Sandbox Code Playgroud)
您还可以通过调用在respond_to块之前进行检查request.xhr?.
从 Rails 6.1.0 开始,xhr?()实际上(最终)返回一个布尔值。
文档说 request.xhr?
Returns true if the “X-Requested-With” header contains “XMLHttpRequest”....
Run Code Online (Sandbox Code Playgroud)
但请注意
request.xhr?
Run Code Online (Sandbox Code Playgroud)
根据=~,返回数字或 nil 值,而不是文档所说的 BOOLEAN 值。
irb(main):004:0> /hay/ =~ 'haystack'
=> 0
irb(main):006:0> /stack/ =~ 'haystack'
=> 3
irb(main):005:0> /asfd/ =~ 'haystack'
=> nil
Run Code Online (Sandbox Code Playgroud)
它基于此:
# File actionpack/lib/action_dispatch/http/request.rb, line 220
def xml_http_request?
@env['HTTP_X_REQUESTED_WITH'] =~ /XMLHttpRequest/
end
Run Code Online (Sandbox Code Playgroud)
所以
env['HTTP_X_REQUESTED_WITH'] =~ /XMLHttpRequest/ => 0
Run Code Online (Sandbox Code Playgroud)
文档:
http://apidock.com/rails/v4.2.1/ActionDispatch/Request/xml_http_request%3F
| 归档时间: |
|
| 查看次数: |
63784 次 |
| 最近记录: |