Google reCAPTCHA 第二次提交失败

Google reCAPTCHA fail for second time submit

我在本教程中实现了 reCAPTCHA,

https://codeforgeek.com/2014/12/google-recaptcha-tutorial/

第一次提交效果不错。我遇到的问题是:

  1. 我将验证码与其他表单数据一起发送,例如用户名,电子邮件等......所以如果验证码是正确的但其他不是,用户将再次发送它,但是第二次它 return “{ "success": false }”

  2. 如果我将它闲置 ~2 分钟,它将会话过期,如果我 select 弹出框,它会弹出警告并警告类似“无法刷新:参数无效”,我不能再select盒子

如何解决这些问题?非常感谢。

Google reCAPTCHA 提供了这两个功能:我总是在所有 AJAX 强大的表单中使用它。

grecaptcha.getResponse()

grecaptcha.reset();

对于你的两个问题,只要你需要,就在你的 JavaScript 代码中使用第二个函数。

Remember this works if you have only one CAPTCHA in your page. If you have more than two CAPTCHAs use their IDs as explained in Google Docs

https://developers.google.com/recaptcha/docs/display#js_api

有同样问题并且在研究过程中遇到这个话题的; 如果您在自动呈现验证码时遇到问题,请尝试显式呈现它。为此,请在 body 标记内添加以下代码。

<script src="https://www.google.com/recaptcha/api.js?onload=recaptchaCallback&render=explicit&hl=tr" async defer></script>
  1.                         var recaptchaCallback = function () {
                               //  alert("grecaptcha is ready!");
                                grecaptcha.render("YOUR HTML DIV ID", {
                             'sitekey': 'YOUR SITE KEY', 
                                });
                            };
    
  2. 我正在使用 AJAX 检查注册表并获得回复。所以我在 AJAX 响应中添加了重置功能。

    $('#frmRegistration').submit(function () { $.ajax({ url: "_ajax/_ajaxRegistration.php", type: "POST", data: $('#frmRegistration').serialize(), success: function (reply) { $('#resultRegistration').html(reply); grecaptcha.reset(); } }); });

参考Google reCaptcha explicit render