2017-04-19 1 views
0

이것은 나를 괴롭힌다. addMethod 규칙에서 ajax를 사용하여 PHP를 통해 내 데이터베이스에 전자 메일 주소가 존재하는지 여부를 확인하는 간단한 검사를 수행합니다. 전자 메일을 찾았을 때 PHP 파일이 "true"또는 "false"를 올바르게 출력하고 있음을 확인했지만 응답이 정확하고 값이 false 인 경우에도 규칙은 항상 true를 반환합니다. (이하 "isExisting"오류 메시지가 항상에 관계없이 이메일이 정말 존재하는지의 여부를 팝업) -Validator가 항상 true를 반환하는 addMethod의 규칙

$.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 
      } 
     }); 
    } 
}); 

그리고 발리에서 :

$("#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를 반환해야한다는 것입니다. 귀하의 경우 유효한 응답은 일치하는 전자 메일이 없기 때문에 AJAX 호출이 false를 반환하면 true를 반환하려는 것입니다.

아마 부울 혼동을 피하기 위해 isExisting보다는 을 isUnused 이 방법을 덜 혼란 스러울 것입니다,하지만 당신은뿐만 아니라 checkemail.php 변경해야합니다.

편집 : 위의 대답을 무시하고, 분명히 문제를 오해했습니다.

실제 문제는 비동기 호출과 관련이 있다고 생각합니다. ayax 호출에서 async : false을 설정하십시오.

+0

감사합니다. 이전에 시도했지만, 다시 시도해 보았습니다. 콘솔에서 다음 오류를 표시합니다. (jquery-3.2.0.min.js : 9446 주 스레드의 동기 XMLHttpRequest는 최종 사용자의 경험에 해로운 영향을 미치므로 더 이상 사용되지 않습니다. 도움이 필요하면 https : // xhr을 확인하십시오. spec.whatwg.org/). 결과는 같습니다. –

관련 문제