有一个登陆页面,您需要使用纯javascript提交表单。信寄出去了,却空空如也。一切都适用于jquery。
const forms = document.querySelectorAll('form');
const message = {
loading: 'img/form/spinner.svg',
success: 'Спасибо! Скоро мы с вами свяжемся',
failure: 'Что-то пошло не так...'
};
forms.forEach(item => {
postData(item);
});
function postData(form) {
form.addEventListener('submit', (e) => {
e.preventDefault();
let statusMessage = document.createElement('img');
statusMessage.src = message.loading;
statusMessage.style.cssText = `
display: block;
margin: 0 auto;
`;
form.insertAdjacentElement('afterend', statusMessage);
const formData = new FormData(form);
const object = {};
formData.forEach(function(value, key){
object[key] = value;
});
fetch('mailer/smart.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(object)
}).then(data => {
console.log(data);
showThanksModal(message.success);
statusMessage.remove();
}).catch(() => {
showThanksModal(message.failure);
}).finally(() => {
form.reset();
});
});
}
function showThanksModal(message) {
const prevModalDialog = document.querySelector('.modal__dialog');
prevModalDialog.classList.add('hide');
openModal();
const thanksModal = document.createElement('div');
thanksModal.classList.add('modal__dialog');
thanksModal.innerHTML = `
<div class="modal__content">
<div class="modal__close" data-close>×</div>
<div class="modal__title">${message}</div>
</div>
`;
document.querySelector('.modal').append(thanksModal);
setTimeout(() => {
thanksModal.remove();
prevModalDialog.classList.add('show');
prevModalDialog.classList.remove('hide');
closeModal();
}, 4000);
}
<?php
header('Content-Type: application/json');
$name = $_POST['name'];
$phone = $_POST['phone'];
$email = $_POST['email'];
$textarea = $_POST['textarea'];
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 = 'mail@gmail.com'; // Наш логин
$mail->Password = 'gmail'; // Наш пароль от ящика
$mail->SMTPSecure = 'ssl'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 465; // TCP port to connect to
$mail->setFrom('mail@gmail.com', 'Сайт'); // От кого письмо
$mail->addAddress('mail@yandex.ru'); // Add a recipient
//$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> <br>
Имя: ' . $name . ' <br><br>
Номер телефона: ' . $phone . '<br><br>
E-mail: ' . $email . '<br><br>
Cообщение: ' .$textarea . '';
if(!$mail->send()) {
return false;
} else {
return true;
}
?>
解决 方法 把这段代码写在php文件的开头
$_POST = json_decode( file_get_contents("php://input"), true );
您需要查看进来的内容
$_POST
,因为您将数据作为 JSON 字符串发送,如果我没记错的话,使用JSON.stringify()
,然后您需要转换此数据,以便您可以在 PHP 中将其进一步处理回数组/ 目的。例如,您正在访问数组的元素$_POST['name']
,但目前它是一个字符串。为此使用json_decode()。因此,您可以根据需要将数据转换为数组或对象,然后使用它。