Я использую 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
синхронно?
submitHandler
срабатывает только тогда, когда форма действительна... однако, если вы еще не проверили reCaptcha, форма недействительна. Моя точка зрения?submitHandler
может быть не лучшим местом для проверки reCaptcha. - person Sparky   schedule 21.06.2018submitHandler
форма действительна и перед отправкой на наш сервер делаем последнюю проверку: капча. - person Eugen Konkov   schedule 21.06.2018