提问人:Nellie 提问时间:5/27/2023 更新时间:5/27/2023 访问量:37
reCAPTCHA + Ajax 永远无法通过验证
reCAPTCHA + Ajax is never passing validation
问:
我有这个表格:
<form id="contact-form" method="post">
<label for="nombre">Nombre:</label>
<input id="nombre" type="text" name="nombre" placeholder="Nombre y Apellidos" required="" />
<label for="email">Email:</label>
<input id="email" type="email" name="email" placeholder="[email protected]" required="" />
<label for="mensaje">Mensaje:</label>
<textarea id="mensaje" name="mensaje" placeholder="Mensaje" required=""></textarea>
<div class="g-recaptcha" data-sitekey="XXXX"></div>
<input id="submit" type="submit" name="submit" value="Enviar" />
<span id="error-message" style="color: red;"></span>
使用此 php 代码进行提交:
<?php
if (isset($_POST['submit'])) {
$ip = $_SERVER['REMOTE_ADDR'];
$response = $_POST['g-recaptcha-response'];
$secretkey = "XXXX";
$url = "https://www.google.com/recaptcha/api/siteverify?secret=$secretkey&response=$response&remoteip=$ip";
$data = file_get_contents($url);
$row = json_decode($data, TRUE);
if ($row['success'] == "true"){
$nombre = $_POST['nombre'];
$email = $_POST['email'];
$mensaje = $_POST['mensaje'];
$para = '[email protected]';
$titulo = 'New contact form entry';
$header = 'From: ' . $email;
$msjCorreo = "Nombre: $nombre\n E-Mail: $email\n Mensaje:\n $mensaje";
if (mail($para, $titulo, $msjCorreo, $header)) {
echo json_encode(['success' => true, 'message' => '¡Gracias por tu mensaje!']);
} else {
echo json_encode(['success' => false, 'message' => 'No ha sido posible enviar tu mensaje. Prueba a contactarme vía RRSS, ¡por favor!']);
}
} else {
echo json_encode(['success' => false, 'message' => 'Oops, you\'re a robot!']);
}
exit;
}
?>
还有这个ajax位,因为如果用户尝试在不验证reCAPTCHA的情况下提交表单,我希望页面不会刷新:
<script>
$(document).ready(function() {
$('#contact-form').submit(function(event) {
event.preventDefault();
var form = $(this);
var url = form.attr('action');
$.ajax({
type: 'POST',
url: url,
data: form.serialize(),
dataType: 'json',
success: function(response) {
if (response.success) {
alert(response.message);
form.trigger('reset');
} else {
$('#error-message').text(response.message);
}
},
error: function() {
$('#error-message').text('An error occurred. Please try again later.');
}
});
});
});
</script>
如果没有 Ajax 验证,表单就像一个魅力:只有在 reCAPTCHA 通过验证时才会提交信息,否则将重新加载页面。但是 Ajax 请求总是返回“出错”,即使我通过了 reCAPTCHA。关于我做错了什么的任何想法?此刻有点迷茫。谢谢!
答: 暂无答案
评论