jquery
  • forms
  • email
  • 2016-02-04 79 views 1 likes 
    1

    我的邮件表单有问题,HTML看起来不错,jQuery部分也是,PHP也都是正确的。我遇到的一个问题是,jQuery无法捕获PHP脚本中的错误响应。 它应该从响应中加载数据并将其放入类中,但没有任何反应,但我可以在控制台中看到响应。简单的PHP,jQuery的电子邮件形式

    这里的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 = "[email protected]_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>"; 
    } 
    

    因此,任何想法,为什么我不能捕获错误的反应? p.s.我只包含代码的必要位。

    +2

    如果存在实际的HTTP错误,则会触发'error'。即服务器错误500或404什么的。但是,如果PHP“mail()”发生故障,您将返回数据。 'ajax'认为它是一个成功的电话。 –

    +0

    除了其他的错误评论,我会说你违反了某种垃圾邮件过滤器。 '$ _POST ['email']'必须来自发送邮件的同一个域。否则,您应该将'$ _POST ['email']'作为回复标头。所以你可以在'mail()'上得到误报,但是服务器仍然无法发送,或者邮件永远不会到达,因为客户拒绝了它。 –

    回答

    1

    这两种看法将在success处理程序被捕获什么文字。 error处理程序用于HTTP响应代码不是200等(如4xx5xx)。如果要触发错误处理程序,使用

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

    这就是说,如果你能正常检测到错误,你应该检查该响应数据在success处理程序检查状态。

    +0

    就是这样。 :) 非常感谢你 – Aca85

    0

    为了将其解释为错误,有必要发生真正的问题服务器端。当电子邮件方法发​​送电子邮件失败时,它将返回false,但请求仍然正常工作,因此它总是会以您的成功方法返回。必须发生内部服务器错误才能使代码返回到错误方法。你可能会抛出一个异常或类似的东西(我不知道如果PHP可以做到这一点),以使代码返回错误的方法。

    不同的方法可能是返回状态码。比方说,

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

    并为您在您的成功方法,它的地位和选择显示给用户

    1

    PHP的邮件功能是奇数,

    main page for mail()

    返回true如果邮件被 成功接受交付, 否则为false。

    重要的是要注意,刚 是很重要的,因为该邮件接受 交付,它意味着邮件 实际上达不到预期的 目的地。


    基本上没有什么你真的可以在纯醇做的PHP,除非你实际上检查电线,看看是怎么回事。我建议使用一些邮件库,它有一些指示是否发送邮件(如果存在)

    相关问题