如果你想整个页面作为Ajax请求的结果重定向,你必须通过JavaScript做客户端服务器端重定向上,而不是通过(这只会重定向阿贾克斯请求自己)。要做到这一点,您可以在ajax()
函数中指定“:eval”作为目标,这将导致返回的响应以Javascript代码的形式执行(请参阅here)。所以,像这样:
$('#someform').click(function() {
ajax("{{=URL('default', 'login_status')}}", [], ':eval');
});
// some controller.py
def login_status():
if auth.user:
return 'this.show()' # or appropriate Javascript code to show the form
else:
return 'window.location = "%s"' % URL('default', 'index')
因此,Ajax调用返回JavaScript,要么显示形式或重定向的页面,这取决于用户是否登录
而且,请注意,URL()
功能。一个服务器端的Python函数,所以你不能在ajax()
函数中调用它,这是一个客户端的Javascript函数。相反,您必须将其放入web2py的模板分隔符({{ }}
)中,以便在服务器上的模板中生成URL。
UPDATE:相反的:
return 'window.location = "%s"' % URL('default', 'index')
,你现在可以做的:
redirect(URL('default', 'index'), client_side=True)
将做幕后同样的事情。
这击中当场!谢谢安东尼。 – profitehlolz 2012-04-26 15:17:11