【发布时间】: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错误 -
谢谢,但是我怎样才能一步一步地处理从服务器返回的数据呢?