2016-07-23 62 views
0

的Recaptcha形式是這樣的:如何jQuery驗證ReCaptcha?

<script type="text/javascript"> var RecaptchaOptions = {"theme":"red","lang":"en"}; </script><script type="text/javascript" src="https://www.google.com/recaptcha/api/challenge?k=6LeThAsTAAAAAKYRjSpA8XZ1s4izK65hYr9ulCiD"> </script><noscript> <iframe src="https://www.google.com/recaptcha/api/noscript?k=6LeThAsTAAAAAKYRjSpA8XZ1s4izK65hYr9ulCiD" height="300" width="500" frameborder="0"> </iframe><br> <textarea name="recaptcha_challenge_field" rows="3" cols="40"> </textarea> <input type="hidden" name="recaptcha_response_field" value="manual_challenge"> </noscript>

和ZF2用於驗證碼的驗證器是這樣的:

$recaptcha = new ZendService\ReCaptcha\ReCaptcha(PUB_KEY, PRIV_KEY); 
$html = $recaptcha->getHTML(); 
$result = $recaptcha->verify($_POST['recaptcha_challenge_field'], $_POST['recaptcha_response_field']); 
if (!$result->isValid()) { 
    // invalid 
} else { 
// valid 
} 

是可以遠程驗證它是這樣的:https://jqueryvalidation.org/remote-method

我在下面的遠程php文件中試過,它不起作用:

$recaptcha = new ZendService\ReCaptcha\ReCaptcha(PUB_KEY, PRIV_KEY); 
$result = $recaptcha->verify($_GET['recaptcha_challenge_field'], $_GET['recaptcha_response_field']); 
if (!$result->isValid()) { 
echo json_encode(false); 
} else { 
echo json_encode(true); 
} 

和JS本身是:

$().ready(function() { 
$("#contact").validate({ 
         rules: { 
           recaptcha_response_field: { 
              required: true, 
              remote: "json.php" 
           }    
        } 
}); 
}); 

是有可能在全部或我做錯了什麼? ()不推薦。使用`$(文件)。就緒(函數()`代替

+0

按照jQuery的文檔,'$()。就緒(函數'還有,你做了什麼樣的故障排除?是否在正確的位置調用了'json.php'並被調用?你是否正在用控制檯檢查Ajax調用?另外,除非使用'remote'的'data'選項,否則只將'recaptcha_response_field'的值發送到你的PHP腳本 – Sparky

+0

由於同樣形式的其他字段使用相同的json.php進行遠程驗證,所以我假設它被調用,我會嘗試你的版本,並用控制檯進行檢查。 – user4271704

+0

如何使用數據選項以及如何發送recaptcha_challlenge_field t OO? @Sparky – user4271704

回答

0

試試這個功能來驗證驗證碼

var grecaptchaId; 
     var onloadCallback = function() { 
      grecaptchaId = grecaptcha.render('grecaptcha', { 
       'sitekey': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 
       'callback': function (response) { 
        $("#grecaptcha_error").text(''); 
       } 
      }); 
     }; 

     function ValidateRecaptcha() { 
      var x; 
      x = grecaptcha.getResponse(grecaptchaId); 
      if (x != "") { 
       $("#grecaptcha_error").text(''); 
       return true; 
      } 
      else { 
       $("#grecaptcha_error").text('The captcha is required and can\'t be empty'); 
       return false; 
      } 
     }