2016-04-03 202 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