これは私の2番目のAjax入門であり、これをどうやって解消するかははっきりしていません。Ajaxでユーザーにログインする...コールバック関数が機能しない
私は匿名ユーザーが特定のタスクを実行しようとすると開くモーダルウィンドウを持っています。このウィンドウには、私のDjangoログインビューに$ .postというユーザーサインアップフォームが含まれています。ユーザー名/パスワードが有効な場合、ユーザーはステータスコード1でログインして応答として返されます。そうでない場合は、0のステータスが返されます。
私はjsの外でそれをしようとすると、動作します。しかし、私のスクリプトの中では失敗します。私はそれがcontent_typeのレスポンスとどのように関係していると思いますか?よく分かりません。
def login_async(request):
if request.method=='POST' and len(request.POST['username'])<20 and len(request.POST['password'])<20:
username=request.POST.get('username', '') #probably need to script tags here
password=request.POST.get('password', '')
user=auth.authenticate(username=username, password=password)
if user is not None:
auth.login(request,user)
status=1
response=HttpResponse()
response['Content_Type']="text/html"
response.write(status)
return response
else:
status=0
response=HttpResponse()
response['Content_Type']="text/html"
response.write(status)
return response
$('input#login').click(function(event){
$.post("/login_async/", {username:$('input[name=username]').val(), password:$('input[name=password]').val()}, //could also use $(this).serialize() here to capture all form inputs
function(data){
if(data==1){
$('#login').dialog("close");
}
});
});
ここで問題は何ですか?私は最初JSONとして応答を返そうとしましたが、serialize.serializers( "json"、status)を動作させる方法を理解できませんでした。私は間違いを続けた。
一つの最後の質問...
私は、ページ上のモーダルウィンドウの動作に影響を与える有効なステータスを(ユーザーがサインインしている)、取得した場合。モーダルウィンドウは、ログイン状態に基づいて開きます。ユーザーがログインしている場合は、クリックイベントでウィンドウが開き、その逆もあります。このトグルはDjangoコンテキスト{%user.is_authenticated%}に依存します。
ページの読み込み時に、そのコンテキストは1回だけ右にレンダリングされますか?状態の変更を簡単なハッキングから安全なモーダルウィンドウに伝えるために何かできますか?
「/ login_async」にURLを変更してみてください。また、コンソールを見ましたか?リクエストの失敗と成功のイベントハンドラを作成して、リクエストが失敗したかどうかを知るためにアラートが表示されるようにします。 – mattsven