升级PHPMailer后AJAX请求JSON解析失败问题排查
解决PHPMailer升级后SMTP日志混入JSON响应的问题
核心原因
PHPMailer 6.x版本默认调试模式会直接将SMTP交互日志输出到HTTP响应流里,和你最后用json_encode输出的JSON内容混合,导致前端拿到的响应不是纯JSON格式,触发JSON.parse语法错误。
具体修复步骤
关闭PHPMailer调试输出:初始化PHPMailer实例后,把调试级别设为0,彻底禁止SMTP日志输出:
$mail->SMTPDebug = 0; // 0代表关闭所有调试输出要是需要保留日志排查问题但不想影响响应,可把日志定向到文件:
$mail->SMTPDebug = 2; // 开启详细调试 $mail->Debugoutput = function($str, $level) { file_put_contents('/your/log/path/smtp.log', date('Y-m-d H:i:s') . " - " . $str . PHP_EOL, FILE_APPEND); };注意要确保日志目录有写入权限。
清空前置输出:确认
process_form.php在json_encode输出前,没有任何echo、print或PHP错误警告输出。可以用输出缓冲清空之前的所有内容:ob_start(); // 这里放你的表单处理、PHPMailer发送代码 ob_end_clean(); // 清空所有前置输出 echo json_encode(['ok' => $is_valid, 'messages' => $messages]); exit; // 确保后续无额外代码输出验证纯JSON响应:修复后直接访问
process_form.php(可模拟POST参数),检查页面内容是否只有纯JSON字符串,无任何额外日志或HTML内容。
内容的提问来源于stack exchange,提问作者kiteandwindsurfer
相关产品推荐
相关产品推荐

