這是我第二次涉足Ajax,我不太清楚如何解決這個問題。Ajax登錄用戶...回調函數不起作用
所以我有一個模式窗口,當匿名用戶試圖執行某個任務時打開。該窗口包含一個用戶註冊表單,然後將$ .post添加到我的Django登錄視圖中。如果用戶名/密碼有效,則用戶登錄狀態碼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」,狀態)工作。我不斷收到錯誤。
最後一個問題......
如果我得到一個有效的狀態(用戶登錄),這將影響到頁面上的模態窗口的行爲。模式窗口基於登錄狀態打開。如果用戶已登錄,則會在點擊事件中打開一組窗口,反之亦然。此切換依賴於Django上下文{%user.is_authenticated%}。
在頁面加載時,該上下文只渲染一次?我可以做任何事情來溝通狀態變化的模式窗口,從簡單的黑客安全嗎?
嘗試將URL更改爲「/ login_async」。另外,你看看控制檯嗎?我會嘗試爲請求失敗和成功創建一個事件處理程序,並且每當發生任何情況時都會顯示警報,以便知道請求是失敗還是成功。 – mattsven 2011-03-16 22:32:05