【问题标题】:How to get message back AJAX PHP JSON如何获取消息返回 AJAX PHP JSON
【发布时间】:2020-11-17 01:41:10
【问题描述】:

我正在使用 phpmailer 发送电子邮件,当我按下“发送”按钮时我会收到电子邮件,但我想留在同一个 HTML 页面上,所以我使用了带有 HTML 和 PHP 的 AJAX 脚本。问题是我没有得到我需要用电子邮件状态和 PHP 响应更新我的 HTML 页面的 JSON 数据,所以:

response_array status
response_array message
response_array success

事实上,执行“错误”而不是“成功”

感谢您的帮助

HTML 中的 AJAX(更新)

<script>
$.ajax({
                type: "POST",
                url: "/mailer.php",
                //data: form.serialize(), // serializes form input
                data: "from_name="+from_name_temp+"&from_email="+from_email_temp+"&choix_gout="+choix_gout_temp, // serializes form input
                dataType: "json",
                success: function(data) {
                    //setTimeout(function() {
                        console.log("Thank you for subscribing!");
                        console.log(data);
                        var parsed_data = data;
                        console.log(data.status);
                        console.log(data.message);
                        console.log(data.success);
                    },
error: function(jqXHR,textStatus,errorThrown) {
                    console.log(textStatus);
                    console.log(errorThrown);
                    console.log(jqXHR);
                    }                           
            });
</script>

PHP 更新

<?php

$error = '';
$name = '';
$email = '';
$subject = '';
$message = '';

$from_email = '';
$from_name = '';
$choix_gout = '';
$response_array = array();

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
    
function clean_text($string)
{
    $string = trim($string);
    $string = stripslashes($string);
    $string = htmlspecialchars($string);
    return $string;
}

 send($from_name, $from_email, $choix_gout); 

function  send($from_name, $from_email, $choix_gout){
        
    $error = '';
            
    $ot1 = $_POST['choix_gout'];
    $ot2 = $_POST['from_name'];
    $ot3 = $_POST['from_email'];

    if(empty($ot2))
    {
        $error .= '<p><label class="text-danger">Please Enter your Name</label></p>';
        $name = '';
    }
    else
    {
        $name = clean_text($ot2);
        if(!preg_match("/^[a-zA-Z ]*$/",$name))
        {
            $error .= '<p><label class="text-danger">Only letters and white space allowed</label></p>';
        }
    }
    if(empty($ot3))
    {
        $error .= '<p><label class="text-danger">Please Enter your Email</label></p>';
        $email = '';
    }
    else
    {
        //$email = clean_text($_POST["from_email"]);
        $email = clean_text($ot3);
        if(!filter_var($email, FILTER_VALIDATE_EMAIL))
        {
            $error .= '<p><label class="text-danger">Invalid email format</label></p>';
        }
    }
    
    
    if($error == '')
    {
    
        require 'PHPMailer/src/Exception.php';          /* Exception class. */
        require 'PHPMailer/src/PHPMailer.php';          /* The main PHPMailer class. */
        require 'PHPMailer/src/SMTP.php';               /* SMTP class, needed if you want to use SMTP. */
        require 'PHPMailer/src/class.html2text.php';

        $mail = new PHPMailer();
        $mail->IsSMTP();
        $mail->SMTPDebug  = "1";
        $mail->Host       = "*****";
        $mail->Port       = "587";
        $mail->SMTPSecure = "tls";
        $mail->SMTPAuth   = "true";
        $mail->Username   = "*****";
        $mail->Password   = "*****";
        $mail->AddReplyTo("*****","****");
        $mail->From       = ("****");
        $mail->FromName   = ("***");
        $mail->AddAddress("*****,******");
        $mail->Subject  = "[GOUT] : " . $ot1 . ';' . $name . ';' . $email;
        $mail->IsHTML(true);
        $mail->Body = "
            <div style='width: 640px; font-family: Arial, Helvetica, sans-serif; font-size: 11px;'>
            </div>
        ";
        if(!$mail->Send()) {
            $message = 'Mail error: '.$mail->ErrorInfo;
            $response_array = array("success"=> false,
                                    "status" => false,
                                    "message" => $message);
            header('Content-Type: application/json');
            echo json_encode($response_array);die();
        } else {
            $message = "email sent";
            $response_array = array("success"=> true,
                                    "status" => true,
                                    "message" => $message);
            header('Content-Type: application/json');
            echo json_encode($response_array);die();
        }
    }
    else{
        $response_array = array("success"=> false,
                                "status" => false,
                                "message" => $error);
        header('Content-Type: application/json');
        echo json_encode($response_array);die();
    }?>

更新

我已经去掉了回显线,并添加了错误功能

从服务器返回的错误结果是 "parsererror"

SyntaxError: JSON.parse: JSON 数据第 1 行第 5 列的 JSON 数据后出现意外的非空白字符

这里是json textResponse的开始

responseText:“2020-07-28 12:05:33 客户端 -> 服务器:EHLOtribe-nutrition.com
\n2020-07-28 12:05:33 客户端 -> 服务器:STARTTLS
\n2020-07-28 12:05:33 客户端 -> 服务器:EHLOtribe-nutrition.com
\n2020-07-28 12:05:33 客户端 -> 服务器:AUTH 登录
\n2020-07 -28 12:05:33 客户端 -> 服务器:[隐藏凭据]
\n2020-07-28 12:05:33 客户端 -> 服务器:[隐藏凭据]
\n2020-07-28 12: 05:33 客户 ->

【问题讨论】:

  • "execution go to "error"" - 所以服务器返回错误响应?那是什么错误?
  • 您可以将error: function(jqXHR, exception) {console.log(exception);} 添加到您当前的ajax 中,以捕获服务器返回给您的异常。请添加并更新您的问题以获取更多信息
  • 你还有一些猖獗的echo,比如echo($ot1);... 这会破坏你稍后尝试返回的任何json(导致js处理程序出错)。您应该真正包含代码返回的错误文本。它可能会暗示你做错了什么。
  • 您需要在服务器上一步一步调试它为什么会抛出parse 错误
  • 谢谢,但是我怎样才能一步一步地处理从服务器返回的数据呢?

标签: php html json ajax


【解决方案1】:

我的 PHP 邮件程序与我的 JSON 冲突时遇到了同样的问题。你需要做两件事。

您应该有一个用户创建的 PHP 邮件设置文件。在该文件中,您需要编辑其中一行以停止调试,如下所示;

  // $mail->SMTPDebug = 2; // this is the standard setting
  $mail->SMTPDebug = 0; // zero means no debugging

然后在您的 PHP 脚本中发送电子邮件并包含编码的 JSON 字符串;

  // Instead of this
  try {  // Conflict
  $mail->send();
  echo "Message has been sent successfully"; // Conflict
  } catch (Exception $e) {
  echo "Mailer Error: " . $mail->ErrorInfo; // Conflict
  }

  // Just use this
  $mail->send();  // No conflicts

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 2013-02-14
    • 1970-01-01
    • 2011-08-18
    相关资源
    最近更新 更多