在django中从服务器发送验证失败时,如何防止表单提交?

时间:2018-09-11 03:00:30

标签: javascript jquery django

我有一个登录页面,当用户输入用户名和密码时,我想将此信息传递给server(post),如果遇到错误,我只想显示错误消息,如果没有错误,我想提交在this情况下,始终禁止提交表单。 在下面的代码中,始终阻止提交并从服务器获取错误消息并显示它:
login.js

   $('#login-form').submit(function(e){

    var message;
    $.post('/login/', $(this).serialize(), function(data){
        obj = JSON.parse(data);
        message = obj.message;
        alert(message);
});
    e.preventDefault();
});


view.py

// if username and password is faild
message="login information is failed"
return HttpResponse(json.dumps({'message': message}))
//else with specific data
return render(request, 'front/member.html', data)

我想这样做:

if(message) e.preventDefault();
// else submit

但首先是e.preventDefault();执行然后从服务器设置消息 我该怎么办?

1 个答案:

答案 0 :(得分:0)

  

但首先是e.preventDefault();执行然后从服务器设置消息,我该怎么办?

这是因为JavaScript是异步的:由于$.post请求将在后台运行,因此该功能已完成,您才能从服务器获取响应。


您有两种方法可以解决此问题:

  1. 您可以捕获$('#login-form').submit,而不是捕获$('submit-button').click
  2. 或者您可以序列化表单数据并使用另一个$.post发送。