You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

联系表单提交失败报Cannot read properties of undefined (reading 'errors')求助

问题根因

  • 后端PHP未将错误信息写入返回给前端的JSON结构,也未正确输出JSON响应,导致前端接收到的响应中不存在errors字段,调用e.errors.errors直接抛出未定义错误
  • 前端jQuery Validate配置中回调函数名拼写错误,succes少写了末尾的s,会导致校验状态更新逻辑异常
  • 邮件发送失败是SSL更新后主机的邮件发送配置变更导致:要么系统内置mail()函数依赖的sendmail服务异常/被托管商禁用,要么SSL更新后原非SSL发件逻辑不再兼容,需要走SSL加密的SMTP发件

修复步骤

1. 修复后端PHP响应逻辑

修正后的PHP代码如下:

$errors = array(); 
$form_data = array();
// 原有中间逻辑保持不变
$send = mail($emailTo, $subject, $Body, $headers);
if($send) {
    $form_data['success'] = true;
    $form_data['posted'] = '提交成功';
} else { 
    $form_data['success'] = false;
    // 将错误信息写入返回的响应数组
    $form_data['errors'] = [
        'errors' => '邮件发送失败,请稍后重试'
    ];  
}
// 新增:输出JSON响应并终止后续逻辑
echo json_encode($form_data);
exit;

2. 修复前端代码错误

  • 修正jQuery Validate的回调函数拼写,将succes: function(e) {改为success: function(e) {
  • 新增前端取值判空逻辑,避免后端响应异常时抛出JS错误,将错误分支的e.errors.errors替换为e?.errors?.errors || '提交失败,请稍后重试',如果不支持可选链语法可以写成(e.errors && e.errors.errors) ? e.errors.errors : '提交失败,请稍后重试'

3. 修复邮件发送异常问题

  • 在PHP代码中开启错误日志,打印mail()函数的报错信息:mail($emailTo, $subject, $Body, $headers);后新增error_log(print_r(error_get_last(), true));,查看主机PHP错误日志定位具体发件失败原因
  • 优先替换内置mail()函数为SMTP发件方案,配置SSL加密的SMTP参数:端口填465、开启SSL验证,适配更新后的SSL环境
  • 确认托管商是否封禁了默认发件端口25,若封禁需使用服务商允许的发件端口配置SMTP服务

内容的提问来源于stack exchange,提问作者sergiu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:54:03