2017-04-19 49 views
0

這使我發瘋。在我的驗證器中,通過使用addMethod規則中的ajax,通過php對數據庫中是否存在電子郵件地址進行簡單檢查。我已經確認php文件正在輸出「true」或「false」,但是該規則總是返回true,即使響應正確且值爲false。addMethod的驗證器規則總是返回true

這是規則:

$.validator.addMethod("isExisting", function() { 
    var checkemail=$("#email").val(); 
    console.log('Email: '+checkemail); // shows email populated correctly 
    if(checkemail){ 
     $.ajax({ 
     type: 'post', 
     url: 'checkemail.php', 
     data: {email:checkemail,}, 
     success: function(response){ 

       console.log(response); // properly returns text "false" when email not found 

       var exists = (response=="false") ? false : true; 

       console.log('exists = '+exists); // is properly false 

       return exists; // returns false 
      } 
     }); 
    } 
}); 

而在驗證 - (以下簡稱 「isExisting」 錯誤消息總是不管郵件是否真的存在或不彈出):

$("#signupform").validate({ 
     errorLabelContainer: "#errors", 
     errorPlacement: function (error, element) { 
      error.insertAfter(element); 
     $(element).addClass(errorClass).removeClass(validClass); 
     }, 
     rules: { 
      fullname: { 
       required: true, 
       minlength: 2 
        }, 
      email: { 
       required: true, 
       email: true, 
       isExisting: true 
        }, 
      areacode: { 
       required: true, 
       digits: true, 
       minlength: 3 
        }, 
      prefix: { 
       required: true, 
       digits: true, 
       minlength: 3 
        }, 
      num: { 
       required: true, 
       digits: true, 
       minlength: 4 
        }, 
      address: { 
       required: true, 
        }, 
      city: { 
       required: true, 
       }, 
      noRobot: { 
       isCaptcha: true, 
      } 
     }, 
     messages: { 
      fullname: { 
       required: "Please enter your full name.<br />", 
       minlength: "Please enter your First and Last name.<br />" 
        }, 
      email: { 
       required: "Please enter your email address.<br />", 
       email: "Please enter a valid email address.<br />", 
       isExisting: "There is already an account with that email address.<br />" 
        }, 
      areacode: { 
       required: "Please enter your areacode.<br />", 
       minlength: "Your areacode should be 3 digits. »XXX« XXX-XXXX<br />" 
        }, 
      prefix: { 
       required: "Please enter your phone number prefix.<br />", 
       minlength: "Your phone number Prefix should be 3 digits. XXX »XXX«-XXXX<br />" 
       }, 
      num: { 
       required: "Please enter your phone number suffix.<br />", 
       minlength: "Your phone number Suffix should be 4 digits. XXX XXX-»XXXX«<br />" 
       }, 
      address: { 
       required: "Please enter your Street Address for pick-up service.<br />" 
        }, 
      city: { 
       required: "Please enter your town or city.<br />" 
        }, 
      noRobot: { 
       isCaptcha: "Please verify that your are not a spam Robot.<br />" 
        } 
     } 
}); 

我會認爲「isExisting:true」只會驗證true,如果真實值是從響應返回的。 (劃痕頭在挫折...)

checkemail.php:

else{ 
    $result = mysqli_query($connect, "SELECT * FROM `customer_info` WHERE `email`='$email' LIMIT 1"); 
    $num = mysqli_num_rows($result); 
    if($num > 0){ 
     echo "true"; 
    } 
    else { 
     echo "false"; 
    } 
} 
mysqli_close($connect); 

回答

0

我的理解是,當響應有效驗證方法應返回true。在你的情況下,有效的迴應是沒有匹配的電子郵件,所以你想返回true,如果AJAX調用返回false。

它很可能是減少混亂,使這個方法isUnused而不是isExisting避免布爾混亂,但你需要改變checkemail.php爲好。

編輯:無視我上面的答案,我明顯誤解了這個問題。

我認爲真正的問題是與異步調用有關。嘗試在您的ajax調用中設置async:false

+0

謝謝,我曾嘗試過,但只是爲了確保我再次嘗試。控制檯然後給我以下錯誤:(jquery-3.2.0.min.js:9446)主線程上的同步XMLHttpRequest由於對最終用戶的體驗有不利影響而不推薦使用。有關更多幫助,請查看https:// xhr。 spec.whatwg.org/。) - 結果是一樣的。 –