这是我第二次涉足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%}。
在页面加载时,该上下文只呈现一次正确吗?我可以做任何事情来将状态更改传达给模式窗口,这些窗口可以轻松解决问题吗?
答案 0 :(得分:1)
应该是Content-Type
。如果这不能解决您的问题,请尝试在$.post
来电结束时添加dataType参数。
$.post("/login_async/", {}, function(data){
// fancy stuff
}, "html");
答案 1 :(得分:0)
是的,我想了很多,并意识到我应该取消绑定模态窗口上现有的click事件处理程序,然后根据ajax响应绑定新的事件处理程序。
我喜欢编程