Отправка данных из формы на электронную почту с помощью jQuery ajax и перенаправление на другую страницу с передачей переменных POST не работает - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть собственная форма в Wordpress, которая после заполнения и нажатия кнопки отправки перенаправляет на страницу с благодарностью и данными из этой формы.В то же время, но перед перенаправлением те же данные из формы отправляются пользователю и администратору по электронной почте.Шаги всего процесса следующие:

  1. Проверка формы в jQuery Validate
  2. Отправка данных из формы в электронное письмо с использованием jQuery ajax
  3. Перенаправлениена страницу, благодарю вас и отправляю переменные из формы на эту страницу, используя метод POST (jQuery + PHP).

jQuery code:

// validation
  $('#registration_form').validate({
    rules: {
      training_name: "required",
      training_place: "required",
      training_date: "required",
      participants_number: {
        required: true,
        range: [0,100]
      },
    (...) // etc 
  });



// jQuery ajax email sending
 $('#registration_form').on('submit', function(e) {
    // e.preventDefault();
    if ($(this).valid()) {
      let formData = $(this).serialize();
      $.ajax({
        url: ajax.url,
        type: 'POST',
        cache: false,
        async: true,
        xhrFields: {
          withCredentials: true
        },
        data: { 
          action: 'registerFormSendEmail', 
          form_data: formData
        },
        success: function(res) {
          // console.log(res);
        }
      });
      // return false;
    }
  });

В html-коде формыУ меня есть имя действия с постоянной ссылкой на страницу Спасибо с переменными POST.Проблема в том, что иногда отправка электронной почты и перенаправление с переменными POST работает, а иногда нет.Чаще всего это не работает в Safari.У кого-то есть идея, почему и что я делаю не так?

1 Ответ

0 голосов
/ 25 сентября 2019

Мне удалось решить проблему.Позже выяснилось, что электронные письма не отправлялись и в других браузерах, кроме Safari. Проблема заключалась в том, что иногда веб-сайт перенаправлялся быстрее, чем электронное письмо, отправленное с использованием Ajax (это, вероятно, зависит от скорости интернет-соединения).Я использовал функции .when () и .then () .Я изменил функцию ajax таким образом, что сначала необходимо было успешно отправить данные формы на электронную почту, а затем отправить форму и перенаправить на страницу с благодарностью.

$('#submit_registration').on('click', function(e) {
    e.preventDefault();
    if ($('#registration_form').valid()) {
      let formData = $('#registration_form').serialize();
      var checkEmailSent;
      $.when(
        $.ajax({
          url: ajax.url,
          type: 'POST',
          dataType: 'JSON',
          cache: false,
          data: { 
            action: 'registerFormSendEmail', 
            form_data: formData,
          },
          success: function(res) {
            console.log(res);
            if (res !== 'sent') {
              alert('Error in sending e-mail.');
              checkEmailSent = false;
            }
          }
        })
      ).then(function() {
        if (checkEmailSent == false) {
          return false;
        } else {
          $('#registration_form').submit();
        }
      });
    }
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...