AJAX提交时调用PHP发送邮件功能不工作该如何排查
问题排查
1. AJAX请求地址错误
你当前main.js中AJAX配置的请求路径是dateien/ajax/premium_account.php,但你实际要调用的是用来发邮件的email.php,路径完全不匹配,自然不会触发email.php里的代码逻辑。
修复方式:把url参数值改为你email.php对应的实际访问路径即可。
2. 请求参数格式错误
你当前写的data: '{pressed:pressed}'是字符串格式,既不是合法的JSON,也不是jQuery默认支持的表单数据格式,后端PHP无法正常解析接收参数。
修复方式:直接传JS对象,jQuery会自动格式化适配:
data: {pressed: 'pressed'},
3. email.php代码逻辑顺序错误
你现在把发邮件的逻辑写在了isset($_POST)判断的前面,只要文件被访问就会先执行发邮件逻辑然后直接exit(),后面的POST判断代码永远不会被执行。另外mail()函数的第四个参数是邮件头,不能直接填写发件人地址,需要符合标准格式。
修复后参考代码:
<?php // 先校验POST请求 if (isset($_POST['pressed'])) { $sender = "From: sender@example.com\r\n"; if(mail('info@example.com', 'FTP', 'Test', $sender)) { echo json_encode(['status' => 'success', 'msg' => 'sent mail']); } else { echo json_encode(['status' => 'error', 'msg' => 'error sending email']); } exit(); } ?>
4. AJAX配置不匹配
你设置了datatype: 'JSON'(注意参数名大小写敏感,正确写法为dataType),但原PHP代码返回的是普通字符串,可能会导致jQuery解析响应时报错,建议和上面修改后的PHP代码配合,统一返回JSON格式即可。
内容的提问来源于stack exchange,提问作者Gunnarius
相关产品推荐
相关产品推荐

