Google reCAPTCHA не работает второй раз

Я реализую reCAPTCHA в этом учебнике,

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

которые хорошо работают в первый раз. У меня проблемы:

  • Я отправляю captcha с другими данными формы, например. имя пользователя, адрес электронной почты и т.д.... так что если captcha правильный, но другой нет, пользователь отправит его снова, но во второй раз он вернется "{" success ": false}"

  • если я простаиваю в течение ~ 2 минут, это закончится, и если я выберу окно, появится всплывающее предупреждение и предупреждает что-то вроде "невозможно обновить: недопустимый параметр", и я не могу снова выбрать поле

Как исправить эту проблему? Большое спасибо.

Ответ 1

Google reCAPTCHA предоставляет эти две функции: я всегда использую это во всех моих формах с поддержкой AJAX.

grecaptcha.getResponse()

grecaptcha.reset();

Для решения обеих ваших проблем используйте вторую функцию всякий раз, когда вам нужно в вашем коде JavaScript.

Помните, что это работает, если у вас есть только одна капча на вашей странице. Если у вас более двух CAPTCHA, используйте их идентификаторы, как описано в Документах Google.

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

Ответ 2

Те, у кого такая же проблема, и встречаются с этой темой во время исследования; Если у вас возникла проблема при рендеринге автоматической конвертации, попробуйте сделать ее явно. Чтобы сделать это, добавьте следующий код внутри тега 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, чтобы проверить регистрационную форму и получить ответ. Поэтому я добавил функцию reset в свой ответ AJAX.

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

Ссылка явная рендеринга reCaptcha Google.