联系表单提交失败报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
相关产品推荐
相关产品推荐

