Json ответ в ajax
Есть форма регистрации, которая работает с помощью ajax
$('.login__form').submit(function(e) {
e.preventDefault();
$.ajax({
url: 'Registration.php',
dataType: 'text',
type: 'POST',
data: {
login: login,
password: pass1,
email: email,
referral: referral
},
success: function(res) {
console.log(res);
console.log(res.message);
console.log(res.color);
},
error: function() {
Notification('Error!');
}
});
});
В файле registration.php прописаны различные проверки на существование почты логина и тд, и соответствующие им оповещения об ошибках, например, если письмо отправлено на почту:
if ($mail->send())
{
$message = 'Message Send. Check your E-mail!';
$color = 'green';
$out = array(
'message' => $message,
'color' => $color
);
header('Content-Type: text/json; charset=utf-8');
echo json_encode($out);
die;
}
Но команды:
console.log(res);
console.log(res.message);
console.log(res.color);
Выводят в консоль следующее:
{"message":"Message Send. Check your E-mail!","color":"green"}2020-02-29 02:19:47 CLIENT -> SERVER: QUIT<br>
undefined
undefined
Почему res.message и res.color приходят как undefined?
UPDATE Виновником является phpMailer, удалил все что связано с отправкой сообщения зарегистрированному пользователю и оставил только оповещение об успешном добавлении в БД, в случае успеха. В итоге запись добавилась, и оповещение появилось, как теперь быть с отправкой почты? Может что-то не так в моих настройках мейлера? Вот код:
$mail = new PHPMailer\PHPMailer\PHPMailer();
$mail->SMTPAuth = true;
$mail->isSMTP();
$mail->CharSet = "UTF-8";
$mail->SMTPKeepAlive = true;
$mail->SMTPAuth = true;
$mail->Host = 'mail.domain';
$mail->Username = 'domain@mail';
$mail->Password = '';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
$mail->setFrom('domain@mail', 'domain@mail');
$mail->addAddress($email);
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$mail->isHTML(true);
$mail->Subject = $title;
$mail->Body = "$messageEmail";
Ответы (3 шт):
Вы возвращаете json, а ожидаете text
Поменяйте dataType: 'text' на dataType: 'json'
Уберите die из php. Начало ответа - в фигурных скобках - это то что, нужно. Больше в ответ ничего попасть не должно, иначе он не распарсится как JSON.
Но теперь мне понятно, почему jQuery думало, что это JSON.
JavaScript:
$.post('Registration.php', {
login: login,
password: pass1,
email: email,
referral: referral
}, function(res) {
console.log(res.message);
console.log(res.color);
}, 'json').error(function() {
// Error...
});
PHP:
<?php
if ($mail->send()) {
$message = 'Message Send. Check your E-mail!';
$color = 'green';
$out = array(
'message' => $message,
'color' => $color
);
header('Content-Type: aplication/json; charset=utf-8');
exit(json_encode($out));
}