我正在开发一个使用Turbolinks gem的Ruby on Rails 4应用程序。我注意到当点击一个链接时,布局仍然呈现在服务器端,但Turbolinks JavaScript只是从呈现的内容中抓取主体。我的问题是在控制器端,是否可以确定请求是否通过Turbolinks发出。本质上,如果请求是通过Turbolinks发出的,我希望将布局设置为false,以避免执行不必要的代码。在我的ApplicationController中,我已经有了以下代码:
# Don't use layout when AJAX request
layout proc { |controller| controller.request.xhr? ? false: "application" }
如果我通过jQuery发出AJAX请求,这段代码会阻止 AJAX 请求呈现标头,但是在使用Turbolinks时,它似乎没有做任何事情。
2条答案
按热度按时间gwo2fgha1#
虽然这有点像黑客,但我发现检查标题中的“X-XHR-Referer”似乎可以达到这个目的。
看起来turbolink添加了一些重定向处理的头。虽然这在未来可能会改变。
uqjltbpv2#
对于Turbo(Turbolinks的后代),我找到的唯一解决方案是检查
formats.any?(:turbo_stream)
,这是因为Turbo插入了一个“turbo-stream”接受头。除非你使用的是框架,否则也会有一个“涡轮框架”头。
它还插入一个CSRF令牌,但我不认为这是任何保证,该请求是从涡轮。