Есть ли способ выполнить валидацию капчи, когда отправляешь форму аяксом. Есть решение

В приложении "Сайт" есть печально известный блок с формой site.send_email_form. 

Опытным путём разобрался как отправить данные формы на сервер без перезагрузки страницы.

Однако, блок с капчей пришлось удалить, поскольку не нашёл способа проверить введённую пользователем капчу на предмет корректности. В итоге на почту начал падать спам.

Подскажите, пожалуйста, способ валидации капчи.

1 ответ

  • 2
    Koin 20 июля 2021 00:33 # Решение

    посмотрите мой вариант https://steemy.ru/topspeed/par...

    работает со стандартной формой и капчой

    • +1
      devellopah devellopah 21 июля 2021 01:46 #

      Выложите кусок кода, который делает валидацию капчи, пожалуйста. Речь не только обо мне, многих может заинтересовать этот вопрос. Да и не каждый сумеет, на примере вашего проекта, разобраться в чём "соль".

      • +2
        Koin Koin 21 июля 2021 19:51 #

        сделал просто, вывожу сразу результат в формате html со странице где форма, а там уже будет видно прошла проверку или нет капча

        • +1
          devellopah devellopah 28 июля 2021 01:19 #

          Спасибо, разобрался. Немного адаптировал по себя.

          Выложу свой код, чтобы понятнее было кому интересно.

          {$errors = array()}
          <div class="js-contact-form-root">
            {if $wa->post("send") and $wa->sendEmail("", $errors)}
              <div>
                <h1>[s`Thank you!`]</h1>
                <p>[s`Your message has been sent.`]</p>
              </div>
            {else}
              <div class="wa-form">
                <h2>Напишите нам</h2>
                <form class="js-contact-form" method="post" action="">
                ...
                ...
                ...
                </form>
            </div>
            {/if}
          </div>

              $(document).on('submit', '.js-contact-form', function () {
                  var $form = $(this);
          
                  $.ajax({
                      type: "post",
                      dataType: "html",
                      url: $form.attr("action"),
                      data: $form.serialize(),
                      success: function (data) {
                          var $html = $(data);
                          $('.js-contact-form-root').html($html.find('.js-contact-form-root').html());
                      }
                  });
          
                  return false;
              })

          p.s. Работает корректно при условии наличия одной формы на странице. Если нужно две формы и более на одной странице, есть смысл добавлять атрибут name к каждой форме.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите