这是我第二次涉足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