[英]Jquery ajax not getting json response from PHP
使用相同的邏輯一切正常,但使用 PHP mail()。 現在我用 PHPMailer 替換了它,當腳本發送 email 時,我沒有收到 json 響應。
Javascript 代碼:
$("#forma_contacto").submit(function(e) {
$.ajax({
type: 'POST',
url: "contact.php",
data: $("#forma_contacto").serialize()
}).done(function(respuesta) {
console.log(respuesta);
$(".resultado-contacto").html(respuesta.mensaje);
if(respuesta.resultado == 'enviado'){
$(".contact-form-area")[0].reset();
}
});
e.preventDefault();
});
PHP 代碼:
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require 'vendor/PHPMailer/Exception.php';
require 'vendor/PHPMailer/PHPMailer.php';
require 'vendor/PHPMailer/SMTP.php';
$sendTo = "xxx@xxxxxx.com";
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$city = $_POST['city'];
$respuesta = array('resultado' => FALSE);
header('Content-Type: application/json; charset=utf-8');
if($city != '')
{
$respuesta['mensaje'] = "<div class='alert alert-danger'>No se permiten bots</div>";
echo json_encode($respuesta);
exit();
}
if ($name == "")
{
$respuesta['mensaje'] = "<div class='alert alert-danger'>Por favor dinos tu nombre</div>";
echo json_encode($respuesta);
exit();
}
if ($email == "")
{
$respuesta['mensaje'] = "<div class='alert alert-danger'>Es necesario tu correo electrónico</div>";
echo json_encode($respuesta);
exit();
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL))
{
$respuesta['mensaje'] = "<div class='alert alert-danger'>El correo es inválido</div>";
echo json_encode($respuesta);
exit();
}
if ($message == "")
{
$respuesta['mensaje'] = "<div class='alert alert-danger'>Por favor escribe tu mensaje</div>";
echo json_encode($respuesta);
exit();
}
if (!preg_match("/^[a-zA-Z ]*$/",$name))
{
$respuesta['mensaje'] = "<div class='alert alert-danger'>Solo se permiten letras y espacios para tu nombre</div>";
echo json_encode($respuesta);
exit();
}
$mail = new PHPMailer(true);
try {
//Server settings
$mail->CharSet = 'UTF-8';
$mail->SMTPDebug = SMTP::DEBUG_SERVER;
$mail->isSMTP();
$mail->Host = 'xxx.xxxx.xxx';
$mail->SMTPAuth = true;
$mail->Username = '**************';
$mail->Password = '*************';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;
//Recipients
$mail->setFrom($sendTo);
$mail->addAddress($sendTo);
$mail->addReplyTo($email, $name);
//Content
$mail->isHTML(true);
$mail->Subject = $subject;
$mail->Body = $message;
$mail->AltBody = $message;
if($mail->send())
{
$respuesta['mensaje'] = "<div class='alert alert-success'>Mensaje enviado exitósamente.</div>";
$respuesta['resultado'] = 'enviado';
} else {
$respuesta['mensaje'] = "<div class='alert alert-danger'>Ocurrió un error y el mensaje no fué enviado. Intena nuevamente.</div>";
$respuesta['resultado'] = 'error';
}
} catch (Exception $e) {
$respuesta['mensaje'] = "<div class='alert alert-danger'>Ocurrió un error y el mensaje no fué enviado.</div>";
$respuesta['resultado'] = $mail->ErrorInfo;
error_log($mail->ErrorInfo);
} finally {
echo json_encode($respuesta);
exit();
}
如果我故意運行未通過表單驗證的測試,我會得到所有 json 響應。 但不是當 email 被正確發送時。 我在 javascript 方面一無所獲。
有任何想法嗎? 我很確定這會很簡單,但我的思緒不再。
那好吧。 它現在正在工作。 我做了太多的測試,以至於我忘記了真正的解決方案是什么。
但是,我的主要懷疑是 PHPMailer 的 DEBUG 功能處於打開狀態,它在發送 email 時“污染”了“echo”(json)。 所以,我把它關掉了。
$mail->SMTPDebug = SMTP::DEBUG_OFF
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.