2013-03-08 37 views
0

我正在檢查數據庫中的重複電子郵件。首先我檢查有效的電子郵件,然後檢查電子郵件的長度,然後我使用ajax檢查數據庫中的電子郵件所以返回true或返回false不工作在ajax code.other驗證是好的,但檢查重複的電子郵件不工作。也ajax響應是好的。
這裏我的js文件 -

返回true/false在阿賈克斯代碼不工作

$(document).ready(function(){ 

var form = $("#form"); 
var registeremail = $("#registeremail"); 
var emailInfo = $("#emailInfo"); 

registeremail.blur(validateEmail); 
registeremail.keyup(validateEmail); 


form.submit(function(){ 
    if( validateEmail()) 
     return true; 
    else 
     return false; 

}); 


function validateEmail(){ 
    //testing regular expression 
    var a = $("#registeremail").val(); 
    var filter = /^[a-zA-Z0-9]+[a-zA-Z0-9_.-]+[a-zA-Z0-9_-][email protected][a-zA-Z0-9]+[a-zA-Z0-9.-]+[a-zA-Z0-9]+.[a-z]{2,4}$/; 
    //if it's valid email 

    if(filter.test(a)){ 
     registeremail.removeClass("error"); 
     emailInfo.text(""); 
     emailInfo.removeClass("error"); 
     if(registeremail.val().length < 8){ 
      registeremail.addClass("error"); 
      emailInfo.text("Min 8 letters required."); 
      emailInfo.addClass("error"); 
      return false; 
     } 
     else if(registeremail.val().length > 60){ 
      registeremail.addClass("error"); 
      emailInfo.text("Max 60 letters required."); 
      emailInfo.addClass("error"); 
      return false; 
     } 
     else 
      { 
      $.ajax({ 
        url: "home/CheckEmail", 
        data: { 
         email: a 
        }, 
        success: function(ret) 
        { 
        if(ret=='1') 
        { 
         registeremail.addClass("error"); 
         emailInfo.text("Email already exist."); 
         emailInfo.addClass("error"); 
         return false; 
        } 
        else if(ret != '1') 
        { 
          registeremail.removeClass("error"); 
          emailInfo.text(""); 
          emailInfo.removeClass("error"); 

          //document.forms["form"].submit(); 
         return true; 
        } 
        } 
      }); 
      } 
    } 
    //if it's NOT valid 
    else{ 
     registeremail.addClass("error"); 
     emailInfo.text("Valid e-mail please"); 
     emailInfo.addClass("error"); 
     return false; 
    } 
} 

});

+1

$ .ajax返回jQuery,而不是您傳遞給它的成功或失敗回調的返回值。最好的辦法是執行回調中的所有邏輯,或者觸發外部函數並將返回值作爲參數傳遞。 – 2013-03-08 06:35:18

+0

$ .ajax是異步的。你需要使用'async:false'選項來使用你的腳本:http://api.jquery.com/jQuery.ajax/ – sdespont 2013-03-08 07:03:05

回答

1

默認情況下,jQuery的ajax調用將異步運行。

所以,當你做一個ajax調用時,成功或錯誤回調不會立即運行。

爲了使上述代碼可行,您可以將'async:false'添加到ajax調用參數中。

但是,使同步ajax調用將凍結用戶界面,直到它完成。如果後端api調用需要很長時間才能完成,那麼這將成爲一個表演停止。

理想的方式是

  1. 顯示一些處理/加載圖標
  2. 發送AJAX調用
  3. 得到響應後,隱藏處理/加載圖標
  4. 基於響應,顯示錯誤/成功的消息。