2016-04-03 142 views
1

我正在使用jQuery和ajax在登录表单上设置密码控件。
到目前为止,这是脚本防止在jQuery表单上提交

$(document).ready(function() { 
    $("#login-form").submit(function(e) { 
     var csrftoken = getCookie('csrftoken'); 
     var password = $('#login-password').val(); 
     var email = $('#login-email').val(); 

     $.ajax({ 
      url: "/password_check/", 
      type: "POST", 
      dataType: "json", 
      data : { 
       csrfmiddlewaretoken: csrftoken, 
       password: password, 
       email: email 
      }, 
      success: function(result) { 
       document.getElementById("login-error").innerHTML = result.response; 
       event.preventDefault(); 
      } 
     }); 
     return false; 
    }); 
}); 

有了这个,烧成提交按钮当错误被逮住,但如果密码是正确的提交不工作(即使该错误不显示了)。
我错过了什么?

回答

2

你有一个异步的ajax调用,所以当你的success函数触发时,表单submit事件已经通过了,所以你需要再次提交表单,但是使用了DOM方法,它将绕过jQuery事件处理程序并允许表格提交。

success: function(result) { 
    if(result == "correct"){ 
     document.getElementById("login-form").submit(); 
    } else { 
     document.getElementById("login-error").innerHTML = result.response; 
    } 
} 

当你没有说什么响应指示正确的密码,我用result == "correct",所以更改相应。

+0

这很完美,谢谢! –

-1

只有当您不想提交表单时,您才必须返回false。 如果密码正确,你需要在你的情况下返回true。

+0

正确的密码由异步ajax调用确定,因此任何'return true'都会在ajax完成之前发生。 – MrCode

+0

在这种情况下,ajax调用确定密码是否正确,如果是正确的,他想提交表单,所以他必须在成功方法中返回true。阅读问题... –

+0

ajax调用是异步的。提交事件不会等待那个调用,它会在ajax得到响应之前完成。您的答案与另一个基本相同,在用户意识到错误后删除。 – MrCode