@Archer667

Почему не передаётся форма через AJAX в php файл?

Отправляю данные из формы через AJAX в файл smart.php. Данные в smart.php передаются, но переменные в php файле эти данные не видят, поэтому и получаю ошибку Undefined index. Абсолютно не понимаю, почему это происходит.

JS
form.addEventListener('submit', function (e) {
    e.preventDefault();
 let data = new FormData(form),
        obj = {};

      let request = new XMLHttpRequest();

      data.forEach(function (value, key) {
        obj[key] = value;
      });
      let jsonData = JSON.stringify(obj);
      console.log(jsonData);

      request.open('POST', 'mailer/smart.php');
      request.setRequestHeader('Content-Type', 'application/json;');
      request.send(jsonData);
)};


PHP
<?php 

$name = $_POST['name'];
$phone = $_POST['phone'];
$email = $_POST['email'];
$message = $_POST['message'];

require_once('phpmailer/PHPMailerAutoload.php');
$mail = new PHPMailer;
$mail->CharSet = 'utf-8';

// $mail->SMTPDebug = 3;                               // Enable verbose debug output

$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com';  // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = 'Yasminderewish@gmail.com';                 // Наш логин
$mail->Password = '*********';                           // Наш пароль от ящика
$mail->SMTPSecure = 'ssl';                            // Enable TLS encryption, `ssl` also accepted
$mail->Port = 465;                                    // TCP port to connect to
 
$mail->setFrom('Yasminderwish@gmail.com');   // От кого письмо 
$mail->addAddress('vladlensidenko@seznam.cz');     // Add a recipient
//$mail->addAddress('ellen@example.com');               // Name is optional
//$mail->addReplyTo('info@example.com', 'Information');
//$mail->addCC('cc@example.com');
//$mail->addBCC('bcc@example.com');
//$mail->addAttachment('/var/tmp/file.tar.gz');         // Add attachments
//$mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name
$mail->isHTML(true);                                  // Set email format to HTML

$mail->Subject = 'Данные с сайта';
$mail->Body    = '
		Пользователь оставил данные <br> 
	Имя: ' . $name . ' <br>
	Номер телефона: ' . $phone . '<br>
	E-mail: ' . $email . '<br>
	Сообщение: ' . $message . ''; 

if(!$mail->send()) {
    return false;
} else {
	return true;
}

?>
  • Вопрос задан
  • 106 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Вы отсылаете запрос с содержимым типа application/json, а принять пытаетесь содержимое типа multipart/form-data (переменная $_POST).
$json = file_get_contents('php://input');
$data = json_decode($json, true);
Ответ написан
Комментировать
fStrange
@fStrange
проще отдавать не в json а в multipart/form-data тогда все будет работать привычно через $_POST
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы