簡體   English   中英

Jquery ajax 沒有得到 PHP 的 json 響應

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM