2013-09-29 3 views
2

제출할 때 데이터베이스에 데이터를 삽입하는 주석 형식이 있습니다. 다음은 코드입니다.reCAPTCHA로 jquery를 사용하여 입력 양식 유효성 확인

function reloadRecaptcha() { 
    var publicKey = "*************************************"; 
    var div = "recap"; 
    Recaptcha.create(publicKey,div,{theme: "white"}); 
    return false; 
} 

function validateForm() { 
    var x=document.forms["cmnts"]["name"].value; 
    if (x==null || x=="") { 
     jAlert('Please enter your name', 'Error'); 
     return false; 
    } 

    var x=document.forms["cmnts"]["email"].value; 
    var atpos=x.indexOf("@"); 
    var dotpos=x.lastIndexOf("."); 
    if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length) { 
     jAlert('Please enter a valid email address', 'Error'); 
     return false; 
    } 

    var x=document.forms["cmnts"]["comment"].value; 
    if (x==null || x=="") { 
     jAlert('Please enter a comment', 'Error'); 
     return false; 
    } 

    var challenge = Recaptcha.get_challenge(); 
    var response = Recaptcha.get_response(); 
    $.ajax({ 
     type: "POST", 
     url: "includes/valrecaptcha.php", 
     async: false, 
     data: { 
      challenge: challenge, 
      response: response 
     }, 
     success: function(resp) { 
      if(resp == "false") { 
       jAlert('Please enter captcha words correctly', 'Error'); 
       reloadRecaptcha(); 
      } 
     } 
    }); 
} 

모든 (형태의 검증 내가 submit 버튼을 누르면 경우를 제외하고 잘 작동과 같은 코멘트는 상관없이 reCAPTCHA를가 올바른지 여부. 페이지가 내가 경고 메시지를 참조하십시오 탐색 시작 직전. I을 게시 .

<h4>Leave your comment</h4> 
<form action="blog?post=".$_GET["post"]."#comments" onsubmit="return validateForm();" name="cmnts" method="post"> 
<div class="form_row"> 
    <label>Name</label><br /> 
    <input type="text" class="tbox" name="name" title="Type your name"/> 
</div> 
<div class="form_row"> 
    <label>Email (not visible to others)</label><br /> 
    <input type="text" class="tbox" name="email" title="Type your email" /> 
</div> 
<div class="form_row"> 
    <label>Comment</label><br /> 
    <textarea name="comment" class="tbox" rows="6" title="Type your comment" ></textarea> 
    <p>You may use following HTML tags and attributes: &lt;b&gt; &lt;cite&gt; &lt;del&gt; &lt;i&gt; &lt;u&gt;</p> 
</div> 
<div class="form_row" style="height:80px;"> 
    <label>Captcha</label><br /> 
    <div id="recap"></div> 
    <p>I must make sure that you're <i>not</i> a spammer or a bot</p> 
    <div style="clear:both;">   
</div> 
<input value="Comment" id="submit" name="submit" class="submit_btn float_l" type="submit"> 
</form> 

<body> 태그는 왜 안 형태로 서브를 얻을 않습니다 return reloadRecaptcha();

있도록 onload 이벤트를 가지고, '다음과 같은 경고 메시지를 표시 jAlert을 사용하고 있습니다 양식입니다 reCAPTCHA를 확인하기 전에 전에 확인 하시겠습니까?

답변

4

이는 validateForm()이 ajax 호출에서 아무 것도 반환하지 않기 때문에 발생합니다. 당신은 isCaptchaValidated 같은 변수를 가지고 있고, 아약스의 성공을() 안에 있음을 설정 한 다음과 같은 아래 아약스 후 그 변수를 반환해야합니다 : 그런데

var isCaptchaValidated = false; 
$.ajax({ 
    type: "POST", 
    url: "includes/valrecaptcha.php", 
    async: false, 
    data: { 
     challenge: challenge, 
     response: response 
    }, 
    success: function(resp) { 
     if(resp == "false") { 
      jAlert('Please enter captcha words correctly', 'Error'); 
      reloadRecaptcha(); 
     } else { 
      isCaptchaValidated = true; 
     } 
    } 
}); 
return isCaptchaValidated; 

, Ajax는 비동기 자바 스크립트와 XML, 그래서 의미 async : false 설정에 반대 할 것입니다.

+0

감사합니다 !! 그것은 일했다!! – Sid

+0

정말 좋았어 !! – Rajesh

+0

@Rajesh : 비동기 메서드를 사용하는 경우 success 메서드에서 값을 설정하기 전에 isCaptchaValidated가 반환됩니다. – Terry

관련 문제