Google reCaptcha + проверка пользовательской формы: могу ли я запустить .execute() синхронно?

Я использую reCaptcha+валидация плагин jQuery:

<script>
  $('#contact_us-form').validate({
    submitHandler: function(form) {
      grecaptcha.execute(); //How to run this syncly?
      $(form).ajaxSubmit({ ... }); // This request without token
    }
  });
</script>
<form>
    ...
    <div class='g-recaptcha' ... />
</form>

Этот код почти работает. Почти потому, что execute запускается асинхронно, и ответ приходит после того, как ajaxSubmit отправляет данные формы.

Обходной путь заключается в том, чтобы назначить свойство callback для g-recaptcha и переместить ajaxSubmit в этот обратный вызов:

var my_callback = function() {
  $(form).ajaxSubmit({ ... });
}

<div class='g-recaptcha' data-callback='my_callback'/>

Но это выглядит волосатым. Кроме того, переменная form недоступна из my_callback, поэтому я не могу повторно использовать этот обратный вызов между похожими формами.

Есть ли способ execute синхронно?


person Eugen Konkov    schedule 21.06.2018    source источник
comment
submitHandler срабатывает только тогда, когда форма действительна... однако, если вы еще не проверили reCaptcha, форма недействительна. Моя точка зрения? submitHandler может быть не лучшим местом для проверки reCaptcha.   -  person Sparky    schedule 21.06.2018
comment
Другой способ — выполнить проверку reCaptcha на стороне вашего сервера вместо другого ajax-вызова Google от клиента. stackoverflow.com/a/15414279/594235   -  person Sparky    schedule 21.06.2018
comment
@Спарки: Да. Он срабатывает до того, как данные будут отправлены на сервер. Нет причин беспокоить Google, если данные формы не проверены. На submitHandler форма действительна и перед отправкой на наш сервер делаем последнюю проверку: капча.   -  person Eugen Konkov    schedule 21.06.2018
comment
@Sparky: этот ответ устарел. Мы должны сделать ajax-вызов в Google, чтобы боты не обращались к нашим серверам.   -  person Eugen Konkov    schedule 21.06.2018
comment
Поскольку асинхронные вызовы ajax, очевидно, являются проблемой, удачи вам.   -  person Sparky    schedule 21.06.2018
comment
Возможно, просто придерживайтесь своего сложного обходного пути, который должен работать, пока вы исправляете селектор формы.   -  person Sparky    schedule 21.06.2018