2016-07-23 131 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; 
      } 
     }