You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

集成reCAPTCHA的Ajax表单始终验证失败,请求排查问题

问题排查与修复

你的Ajax请求始终触发error回调,主要是以下几个问题导致的:

1. PHP代码语法错误(if语句缺失大括号)

原PHP中if ($row['success'] == "true")没有包裹大括号,导致后续代码逻辑混乱——只有$nombre = $_POST['nombre'];属于这个if分支,其余代码会无条件执行,包括else块,最终引发语法错误,返回的内容不是合法JSON,Ajax无法解析。

2. 表单缺少action属性

你的form标签未设置action属性,Ajax里form.attr('action')会获取到undefined,请求地址错误,导致请求失败。

3. reCAPTCHA验证逻辑错误

$row['success']是布尔值(true/false),不是字符串,用== "true"判断会导致验证逻辑失效。

4. PHP输出内容不纯净

原代码末尾有多余的<p>?&gt;</p>,会输出额外HTML内容,破坏JSON格式,导致Ajax解析失败。


修正后的代码

表单代码(补充action属性)

<form id="contact-form" method="post" action="submit-form.php">
    <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="ejemplo@correo.com" 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>
</form>

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']) {
        $nombre = $_POST['nombre'];
        $email = $_POST['email'];
        $mensaje = $_POST['mensaje'];
        $para = 'my-email@gmail.com';
        $titulo = 'New contact form entry';
        $header = 'From: ' . $email;
        $msjCorreo = "Nombre: $nombre\nE-Mail: $email\nMensaje:\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代码(优化调试信息)

<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');
                    grecaptcha.reset(); // 重置reCAPTCHA
                } else {
                    $('#error-message').text(response.message);
                }
            },
            error: function(xhr) {
                console.log(xhr.responseText); // 打印错误信息便于调试
                $('#error-message').text('An error occurred. Please try again later.');
            }
        });
    });
});
</script>

额外提示:需确保页面已正确引入jQuery库和reCAPTCHA官方脚本,否则reCAPTCHA无法加载,Ajax也无法正常运行。

内容的提问来源于stack exchange,提问作者Nellie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 01:17:46