【发布时间】:2018-08-15 23:09:28
【问题描述】:
我正在尝试在网站上实施不可见的 reCaptcha。但我无法让它工作。这是我正在做的事情:
标题
<!-- Invisible reCaptcha -->
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
form.php
<form id="contact-form" class="contact-form" action="#contact">
<p class="contact-name">
<input id="contact_name" type="text" placeholder="Full Name" value="" name="name" />
</p>
<p class="contact-email">
<input id="contact_email" type="text" placeholder="Your E-Mail Address" value="" name="email" />
</p>
<p class="contact-message">
<textarea id="contact_message" placeholder="Your Message" name="message" rows="15" cols="40"></textarea>
</p>
<p class="contact-submit">
<a type="submit" id="contact-submit" class="submit" href="#">Send Your Email</a>
</p>
<div id="recaptcha" class="g-recaptcha" data-sitekey="6LceN0sUAAAAAPvMoZ1v-94ePuXt8nZH7TxWrI0E" data-size="invisible" data-callback="onSubmit"></div>
<div id="response">
</div>
</form>
script.js
// contact form handling
$(function() {
$("#contact-submit").on('click',function() {
$contact_form = $('#contact-form');
var fields = $contact_form.serialize();
var test = grecaptcha.execute();
console.log(fields);
console.log(test);
$.ajax({
type: "POST",
url: "assets/php/contact.php",
data: fields,
dataType: 'json',
success: function(response) {
if(response.status){
$('#contact-form input').val('');
$('#contact-form textarea').val('');
}
$('#response').empty().html(response.html);
}
});
return false;
});
});
contact.php
private function validateFields(){
// Check reCaptcha
if(!$this->captcha){
echo "Please fill out the reCaptcha correctly";
}
$response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secretkey."&response=".$this->captcha."&remoteip=".$_SERVER['REMOTE_ADDR']);
if(intval($responseKeys["success"]) !== 1) {
echo "You are a bot! GO AWAY!";
}
如果 g-recaptcha-response 不为空,则后端 (contact.php) 工作正常。但是我的问题是当我尝试这样做时,g-recaptcha-response(在 var 字段和测试中)总是空的。当我在表格上显示 recapcha 并填写时,g-recapcha-response 不是空的,一切正常。 我知道我必须在某个地方调用 grecaptcha.execute() ,但即使我这样做了,变量也是空的。如何以编程方式调用 this?
感谢您的每一次帮助!提前谢谢!
【问题讨论】:
-
你错过了
data-callback吗?我相信这个功能就是获得你发送的价值(作为第一个参数)。由于您通过 ajax 发布表单,因此您可能必须将 ajax 部分移动到回调函数中,这样它就不会过早触发(因为回调没有承诺)。 -
你好。我忘了复制它。对不起。我正在关注本指南:developers.google.com/recaptcha/docs/… 2. 示例
-
好的,你在某处有
onSubmit = function(token) {}设置吗? -
没有。这就是我所缺少的,我不知道把它放在哪里:(
-
好的,让我写一个例子,它应该*能在你目前所拥有的基础上继续工作。
标签: javascript php html ajax recaptcha