我的邮件表单有问题,HTML似乎很好,jQuery部分也是如此,PHP也是正确的。我遇到问题的部分是jQuery无法从PHP脚本中捕获错误响应。 它应该从响应加载数据并将其放入类中,但没有任何反应,但我可以在控制台中看到响应。
这里是jquery:
jQuery.ajax({
url: "send_email.php",
data:'name='+emailData.name+'&email='+
emailData.email+'&subject='+
'Hello'+'&body='+
emailData.body,
type: "POST",
success:function(data){
$("#contactForm .status").html(data);
},
error:function(data){
$('#modal .modal-body').html(data);
}
});
和PHP脚本:
$toEmail = "admin@phppot_samples.com";
$mailHeaders = "From: " . $_POST["name"] . "<". $_POST["email"] .">\r\n";
if(mail($toEmail, $_POST["subject"], $_POST["body"], $mailHeaders)) {
print "<p class='success'>Mail Sent.</p>";
} else {
print "<p class='error'>Problem in Sending Mail.</p>";
}
那么,为什么我无法捕获错误响应的任何想法? 附:我只包括代码的必要位。
答案 0 :(得分:1)
两个响应都将在success
处理程序中捕获。 error
处理程序用于HTTP响应代码不是200
等(例如4xx
,5xx
)。如果要触发错误处理程序,请使用
} else {
header('500 Problem' );
print "<p class='error'>...</p>";
}
也就是说,如果您可以优雅地检测到错误,则应通过检查响应数据来检查success
处理程序中的状态。
答案 1 :(得分:1)
PHP的邮件功能很奇怪,
如果邮件是,则返回TRUE 成功接受交付, 否则就错了。
重要的是要注意这一点 因为邮件被接受了 交付时, NOT 表示邮件 实际上会达到目的 目的地。
除非 实际 检查电汇以查看正在发生的事情,否则基本上没有任何东西真正可以在普通的PHP中完成。我建议使用一些邮件库来表明邮件是否发送(如果存在)
答案 2 :(得分:0)
必须发生真正的问题服务器端才能被解释为错误。当电子邮件方法无法发送电子邮件时,它将返回false,但无论如何请求仍然正常,因此它将始终以您的成功方法返回。必须发生内部服务器错误才能使代码返回错误方法。你可以抛出一个异常或类似的东西(我不知道php是否可以这样做),以便让代码在错误方法中返回。
另一种方法可能是返回状态代码。我们说
Status 0-> Email sent
Status 1-> Email not sent
并在您的成功方法中检查该状态,并选择要向用户显示的文本