Ajax登录用户...回调函数不起作用

时间:2011-03-16 22:21:01

标签: django jquery django-templates

这是我第二次涉足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”,status)工作。我一直收到错误。

最后一个问题......

如果我获得有效状态(用户已登录),则会影响页面上模式窗口的行为。模态窗口根据登录状态打开。如果用户已登录,则会在单击事件上打开一组窗口,反之亦然。此切换取决于Django上下文{%user.is_authenticated%}。

在页面加载时,该上下文只呈现一次正确吗?我可以做任何事情来将状态更改传达给模式窗口,这些窗口可以轻松解决问题吗?

2 个答案:

答案 0 :(得分:1)

应该是Content-Type。如果这不能解决您的问题,请尝试在$.post来电结束时添加dataType参数。

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

答案 1 :(得分:0)

是的,我想了很多,并意识到我应该取消绑定模态窗口上现有的click事件处理程序,然后根据ajax响应绑定新的事件处理程序。

我喜欢编程