2013-06-29 52 views
1

我有一個簡單的表單,用於註冊一個新用戶。我想阻止用戶再次提交相同的電子郵件ID。因此,在提交表單之前,如果電子郵件ID存在或不存在,我希望進行Ajax檢查。如果電子郵件ID存在,我會提醒用戶。如果沒有,我讓表單提交。通過Javascript表單Sumbit執行ajax檢查

$("#sign_in_form").submit(function(event){ 

event.preventDefault(); 
$.post("http://xyz.com/check_if_user_exists", { 
     email : $("#contact_person_email").val() 
    }).done(function(data) { 

var res = parseInt(data); 
if(res==1){ 

//Email Exists 
alert("Email exists . Please use different email "); 
return false; //----------------------------1) 

}else{ 
    //Email doesnt exist 
return true; //--------------------------- 2) 
} 

}); 

//end of function 

}); 

這段代碼的問題是由於使用Javascript的異步性質,函數結束的結果從AJAX後語句返回之前也。因此,在1)和2)返回錯誤或返回true語句不起作用。什麼是處理這個問題的正確方法?

回答

3

提交表單,如果檢查有效使用JS原生事件:

$("#sign_in_form").submit(function (event) { 

    event.preventDefault(); 
    $.post("http://xyz.com/check_if_user_exists", { 
     email: $("#contact_person_email").val() 
    }).done(function (data) { 

     var res = parseInt(data); 
     if (res == 1) { 

      //Email Exists 
      alert("Email exists . Please use different email "); 

     } else { 
      document.getElementById('sign_in_form').submit(); 
     } 

    }); 

    //end of function 

}); 
+0

但是這不會導致到$(「#sign_in_form」)提交()函數被再次調用,因此遞歸發生了什麼? –

+1

不,因爲在節點元素(js)上使用submit()將不會觸發jquery提交處理程序 –

+0

+1但OP代碼中的問題是什麼?如果他只想調用alert而不是自動提交,會怎樣? –