在需要用户(通过设计)的AJAX调用中处理重定向的最佳方法是什么?我想做类似的事情:
$('#love').click(function() {
$.get('/item/#{item.id}', function(data) {
if (data.redirect) { window.location.replace(data.redirect); return; }
});
});
但是,我不确定在过滤(验证用户)处理'js'请求格式之前如何设计。有什么想法吗?
答案 0 :(得分:3)
Devise有特殊选择:http_authenticatable_on_xhr
您可能会发现this devise issue相关。
另外,我真的建议不要在XHR请求中使用重定向。一旦你尝试使用firefox,你会发现自己陷入痛苦的世界。在Gecko 7.0之前,firefox在执行XHR重定向时不会保存原始请求中的标题。
根据developer.mozilla.org XMLHttpRequest page:
来自Gecko 7.0 setRequestHeader()设置的标头在跟随重定向时随请求一起发送。以前这些标题不会被发送。
答案 1 :(得分:2)
您可以在ApplicationController
文件中执行以下操作,以通过AJAX重定向:
# allows redirecting for AJAX calls as well as normal calls
def redirect_to(options = {}, response_status = {})
if request.xhr?
render(:update) {|page| page.redirect_to(options)}
else
super(options, response_status)
end
end
基本上,如果通过AJAX发出请求并且控制器操作(或者before_filter)表示要重定向到登录页面,这将重定向该页面以进行该AJAX调用。
如果您将请求数据存储在cookie中,则可以在用户经过适当身份验证后完成请求。