Задать вопрос
jun_dev
@jun_dev
Frontend-developer

При отправки на почту ajax/php приходят пустые поля. В чём причина?

При отправке на почту оповещение приходит и всё норм, но после подключения ajax приходят пустые поля.
Подскажите пожалуйста в чем причина?

<form action="server.php" class="order-form main-form" id="form" method="post" name="user_form">
			<input type="text" placeholder="Имя и фамилия" name="name" required="required">
			<input type="email" placeholder="E-mail" name="email" required="required">
			<input type="tel" placeholder="Телефон" name="phone" required="required">
			<button class="button btn form-btn" id="submit_btn" type="submit">Оставить заявку!</button>
	</form>

$post_data = $_POST;
$to = 'myemail@mail.ru';
$subject = 'Заявка с лендинга';
$message = 'Заявка с лендинга<br />
Имя: ' . $post_data['name'] . '<br />
E-mail: ' . $post_data['email'] . '<br />
Телефон: ' . $post_data['phone'];
$headers = "MIME-Version: 1.0\r\n" . "Content-type: text/html; charset=utf-8\r\n" . "From: <myemail@gmail.com>\r\n";
mail ($to, $subject, $message, iconv ('utf-8', 'windows-1251', $headers));

/* Всплывающее сповещение  */
      const errorMesage = 'Что-то пошло не так...';
      const loadMesage = 'Загрузка...';
      const successMesage = 'Спасибо! Мы скоро с Вами свяжемся!';

     /* Стилизация сообщения*/
     const statusMessage = document.createElement('div');
     statusMessage.style.cssText = `font-size: 2rem; color: #fff`;

      /* Очищаем input при отправке */
      const clearInput = () => {
        const inputs = document.querySelectorAll('input');
        inputs.forEach((item, i, arr) => {
          inputs[i].value = '';
        });
      };


      /* form  --------------------------------------------- */
      const form = document.getElementById('form');

      form.addEventListener('submit', (event) => {
        event.preventDefault();

        /*Показываем сообщение и очищаем поля*/
        form.appendChild(statusMessage);
        statusMessage.textContent = loadMesage;
        clearInput();

        const formData = new FormData(form);
        let body = {};
        formData.forEach((val, key) => {
          body[key] = val;
        });

        postData(body, () => {
          statusMessage.textContent = successMesage;
        }, (error) => {
          statusMessage.textContent = errorMesage;
          console.error(error);
        });

      });

      /* ---------------------------------------------- */

      const postData = (body, outputData, errorData) => {

        const request = new XMLHttpRequest();

        request.addEventListener('readystatechange', () => {

          if (request.readyState !== 4) {
            return;
          }
          if (request.status === 200) {
            outputData();
          }else{
            errorData(request.status);
          }
        });

        request.open('POST', './server.php');
        request.setRequestHeader('Content-Type', 'application/json');
        request.send(JSON.stringify(body));
      };

    };
  • Вопрос задан
  • 68 просмотров
Подписаться 1 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
Видимо форма чистится до того как данные из нее берутся.

Попробуйте так:
postData(body, () => {
        clearInput(); 
        statusMessage.textContent = successMesage;
    }, (error) => {
        statusMessage.textContent = errorMesage;
        console.error(error);
    });


Таким образом вслучае ошибки пользователю не прийдется заново все вводить
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽