あなたは完全なページがAjaxリクエストの結果としてリダイレクトしたい場合は、クライアント上ではなく、サーバー側のリダイレクトを経由してJavaScriptでそれを行う必要があるでしょう(のみのAjaxをリダイレクトします要求自体)。そのようにするには、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関数であるため、クライアントサイドのJavaScript関数であるajax()
関数内で呼び出すことはできません。代わりに、URLをweb2pyのテンプレートデリミタ({{ }}
)に入れて、サーバ上のテンプレートにURLを生成する必要があります。あなたが今できること
return 'window.location = "%s"' % URL('default', 'index')
:
UPDATE:代わりに、舞台裏でも同じことを行います
redirect(URL('default', 'index'), client_side=True)
。
!感謝アンソニー。 – profitehlolz