我需要检查用户是否仍处于登录状态,这样我就可以防止他们在 session 过期(已注销但页面未刷新)时打开表单。
这是我尝试做的伪代码,显然不起作用。
// some view.html
$('#someform').click(function() {
ajax(URL('login_status'), [], '');
});
// some controller.py
def login_status():
if not auth.user:
redirect('index')
最佳答案
如果您希望整个页面作为 Ajax 请求的结果进行重定向,您必须通过客户端上的 Javascript 来完成,而不是通过服务器端重定向(它只会重定向 Ajax 请求本身)。为此,您可以将“:eval”指定为 ajax()
函数中的目标,这将导致返回的响应作为 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。
更新:代替:
return 'window.location = "%s"' % URL('default', 'index')
您现在可以:
redirect(URL('default', 'index'), client_side=True)
这将在幕后做同样的事情。
关于javascript - 如何从 web2py 中的 View 动态检查登录状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10323714/