2017-04-19 74 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/。) - 结果是一样的。 –