如果你想整個頁面作爲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