我正在嘗試使用ajax提交登錄表單。我很困惑我應該如何處理例外/成功的迴應。我從服務器獲得200 OK,表單通過密碼/用戶名字段返回錯誤。根據服務器響應,我如何獲得顯示或重定向用戶到相應頁面的錯誤消息?Django Ajax登錄表格
JQUERY:
56 $(window).load(function(){
57 $('#login_form').submit(function(e){
58 e.preventDefault();
59 var request_url = document.getElementById('next').value
60 $.ajax({
61 type:"POST",
62 url: $(this).attr('action'),
63 data: $('#login_form').serialize(),
64 success: function(response){ $('#msg').text(response);
65 console.log(response);
66 },
67 error: function(xhr, ajaxOptions, thrownError){ alert($('#login_error').text('Username already taken. Please select another one.')},
68 });
69 });
70 });
VIEW:更新
51 def login(request):
52 if request.method == 'POST':
53 request.session.set_test_cookie()
54 login_form = AuthenticationForm(request, request.POST)
55 if login_form.is_valid():
56 if request.is_ajax:
57 user = django_login(request, login_form.get_user())
58 if user is not None:
59 return HttpResponseRedirect(request.REQUEST.get('next', '/'))
**else:**
61 **return HttpResponseForbidden() # catch invalid ajax and all non ajax**
60 else:
61 login_form = AuthenticationForm(request)
62
63 c = Context({
64 'next': request.REQUEST.get('next'),
65 'login_form': login_form,
66 'request':request,
67 })
68 return render_to_response('login.html', c, context_instance=RequestContext(request))
FORM:
7 <tt id="login_error"></tt>
8 <form id="login_form" action="" method="post">
9
10 {{ login_form }}
11 <input type="submit" value="login"/>
12 <input type="hidden" id="request_path" name="next" value="/"/>
13 </form>
14 <p>{{ request.get_full_path }}</p>
15 <tt id='msg'></tt>
值得注意的是你需要確保你正在處理正確的csrf令牌,否則你會遇到與Ajax形式的問題 - https://docs.djangoproject.com/en/1.4/ref/contrib/csrf/#ajax –
謝謝艾丹!有效。現在我唯一需要弄清楚的是如何從響應中解析出「下一個」值,以便我可以正確地重定向頁面。 :) – user1462141
它不應該需要解析,我期望它是一個字符串(我不知道沒有看到它是如何設置的)。我的猜測是POST或GET數據中沒有'next'屬性,所以默認值'/'正在被使用。你需要知道它是如何設置的。請查看此處的文檔以獲取有關請求的更多信息。請求字典 - https://docs.djangoproject.com/en/1.4/ref/request-response/#django.http.HttpRequest.REQUEST –