anov
@anov
Junior coder

Почему обрабатывается ответ только от первой капчи?

Добрый день, уважаемые хабровчане!
Поставил на сайт одну капчу и всё работало хорошо. Затем пришлось поставить вторую и начались проблемы.
Суть в том, что обработка ответа капчи от сервера гугла происходит для той капчи, которая идет первой в DOM. В общем-то обе формы с капчей по отдельности работают как надо, а вместе - нет.
для второй капчи не могу получить grecaptcha.getResponse();
В заголовках php файла ответ g-recaptcha-response есть, закодированный.

Переименовывал объекты grecaptcha, чтобы привязать их к конкретному dom-узлу - не помогло.
Grecaptcha - это объект, и на него как-то можно сослаться, наверное.
Думал, что так как на странице две капчи, то и объектов grecaptcha должно быть два, значит их надо как-то положить в массив или в коллекцию и перебрать - не получилось.
Обращался grecaptcha[0], grecaptcha[1] - хрена там.

Возможно ли каким-то образом обратиться ко второму объекту grecaptcha или же один переписывает другой?
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
anov
@anov Автор вопроса
Junior coder
Возился-возился, а ответ, как полагается, был прост:
var recaptchaRequest;
var recaptchaRecall;
var onloadCallback = function() {
    // отрисовка recaptcha-request на элементе с id="recaptcha-request"
    recaptchaRequest = grecaptcha.render('recaptcha-request', {
      'sitekey' : 'публичный-ключ' 
    });
    // отрисовка recaptcha2 на элементе с id="recaptcha2"
    recaptchaRecall = grecaptcha.render('recaptcha-recall', {
      'sitekey' : 'публичный-ключ' 
    });
};


Запара была в том, что в response надо было подставить ответ от нужной формы при валидации в formData.
Для каждой формы в своем валидаторе.
var response = grecaptcha.getResponse(recaptchaRecall);
var response = grecaptcha.getResponse(recaptchaRequest);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
grecaptcha.ready(function() {
          grecaptcha.execute('код', {action: 'url'}).then(function(token) {
              // Add your logic to submit to your backend server here.
          });
          grecaptcha.execute('код2', {action: 'url2'}).then(function(token) {
              // Add your logic to submit to your backend server here.
          });
        });
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы