简单的PHP,jQuery电子邮件表单

时间:2016-02-04 20:18:26

标签: jquery forms email

我的邮件表单有问题,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>";
}

那么,为什么我无法捕获错误响应的任何想法? 附:我只包括代码的必要位。

3 个答案:

答案 0 :(得分:1)

两个响应都将在success处理程序中捕获。 error处理程序用于HTTP响应代码不是200等(例如4xx5xx)。如果要触发错误处理程序,请使用

} else { 
   header('500 Problem' );
   print "<p class='error'>...</p>";
}

也就是说,如果您可以优雅地检测到错误,则应通过检查响应数据来检查success处理程序中的状态。

答案 1 :(得分:1)

PHP的邮件功能很奇怪,

来自main page for mail()

  

如果邮件是,则返回TRUE   成功接受交付,   否则就错了。

     

重要的是要注意这一点   因为邮件被接受了   交付时, NOT 表示邮件   实际上会达到目的   目的地。

除非 实际 检查电汇以查看正在发生的事情,否则基本上没有任何东西真正可以在普通的PHP中完成。我建议使用一些邮件库来表明邮件是否发送(如果存在)

答案 2 :(得分:0)

必须发生真正的问题服务器端才能被解释为错误。当电子邮件方法无法发送电子邮件时,它将返回false,但无论如何请求仍然正常,因此它将始终以您的成功方法返回。必须发生内部服务器错误才能使代码返回错误方法。你可以抛出一个异常或类似的东西(我不知道php是否可以这样做),以便让代码在错误方法中返回。

另一种方法可能是返回状态代码。我们说

Status 0-> Email sent
Status 1-> Email not sent

并在您的成功方法中检查该状态,并选择要向用户显示的文本