2011-03-16 78 views
0

這是我第二次涉足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%}。

在頁面加載時,該上下文只渲染一次?我可以做任何事情來溝通狀態變化的模式窗口,從簡單的黑客安全嗎?

+0

嘗試將URL更改爲「/ login_async」。另外,你看看控制檯嗎?我會嘗試爲請求失敗和成功創建一個事件處理程序,並且每當發生任何情況時都會顯示警報,以便知道請求是失敗還是成功。 – mattsven 2011-03-16 22:32:05

回答

1

它應該是Content-Type。如果這不能解決您的問題,請嘗試在$.post呼叫的末尾添加dataType參數。

$.post("/login_async/", {}, function(data){ 
    // fancy stuff 
}, "html"); 
+0

是的,感謝haochi,似乎有伎倆。不過,我的大問題依然存在。我現在登錄了我的用戶,但我不知道如何將這一事實傳達給我的模態窗口,其行爲由{%if user.is_authenticated%} django上下文變量支配 – Ben 2011-03-16 22:54:45

+0

@Brendan也許有一個變量它位於全局範圍內,稱爲'var user_logged_in = {%user.is_authenticated%};'。登錄過程之後,只需使用響應更新變量即可。在你的事件處理程序中只需添加一個'if(user_logged_in){} else {}' – Haochi 2011-03-17 01:37:38

0

是的,我認爲它在越來越意識到,我應該只是取消綁定的模態窗口的現有的點擊事件處理程序,然後綁定取決於Ajax響應新的事件處理程序。

我喜歡編程