2015-06-30 28 views
1

我在PHP中编写邮件发件人,并通过jQuery与jQuery调用它。这是我的PHP代码的一部分:发送邮件后PHP/jQuery AJAX错误响应

// Send the email. 
     if (mail($recipient, $subject, $email_content, $email_headers)) { 
      // Set a 200 (okay) response code. 
      http_response_code(200); 
      echo "Thank You! Your message has been sent."; 
     } else { 
      // Set a 500 (internal server error) response code. 
      http_response_code(500); 
      echo "Oops! Something went wrong and we couldn't send your message."; 
     } 

这是我的JS:

$(form).submit(function(e) { 
     // Stop the browser from submitting the form. 
     e.preventDefault(); 

     // Serialize the form data. 
     var formData = $(form).serialize(); 

     // Submit the form using AJAX. 
     $.ajax({ 
      type: 'POST', 
      url: $(form).attr('action'), 
      data: formData 

     }) 
     .done(function(response) { 
      // Make sure that the formMessages div has the 'success' class. 
      $(formMessages).removeClass('error'); 
      $(formMessages).addClass('success'); 

      // Set the message text. 
      $(formMessages).text(response); 

      // Clear the form. 
      $('#nombre').val(''); 
      $('#email').val(''); 
      $('#telefono').val(''); 
      $('#pais').val(''); 
     }) 
     .fail(function(data) { 
      // Make sure that the formMessages div has the 'error' class. 
      $(formMessages).removeClass('success'); 
      $(formMessages).addClass('success'); 

      // Set the message text. 
      if (data.responseText !== '') { 
       $(formMessages).text(data.responseText); 
      } else { 
       $(formMessages).text('Oops! An error occured and your message could not be sent.'); 
      } 
     }); 
    }); 

和HTML表单,以防万一:

<form id="ajax-contact" method="post" action="mailer.php"> 
    <ul> 
     <li><input name="nombre" id="nombre" class="inputNombre" placeholder="Nombre" required/></li> 
     <li><input name="email" id="email" placeholder="E mail" type="email" class="inputEmail" required/></li> 
     <li><input name="telefono" placeholder="Teléfono" class="inputTelefono" id="telefono" required/></li> 
     <li><input name="pais" placeholder="País" class="inputPais" id="pais" required /></li> 
     <li><input name="submit" type="submit" value="Enviar" class="botonEnviar" id="submit"></input></li> 
    </ul> 
</form> 

这里奇怪的是,即使发送邮件,这总是会转到else分支并设置500代码,所以当我试图管理响应时,我得到了错误的答案。但我收到邮件,所以if正在工作。

我总是得到响应代码500,据说设置为邮件失败时。

我在做什么错?

+0

您标记为AJAX,但您没有任何JavaScript代码。您应该添加更多的代码,因为您发布的代码片段是有效的。 –

+0

我添加了更多的代码来澄清,对不起。 – Ikzer

+0

检查PHP错误日志。 –

回答

0

尝试增加elseif(!)

if (mail($recipient, $subject, $email_content, $email_headers)) { 
       // Set a 200 (okay) response code. 
       http_response_code(200); 
       echo "Thank You! Your message has been sent."; 
      } 

elseif (!mail($recipient, $subject, $email_content, $email_headers)) { 
       // Set a 500 (internal server error) response code. 
       http_response_code(500); 
       echo "Oops! Something went wrong and we couldn't send your message."; 
      } 
+0

不,我得到的代码500,但邮件发送。 – Ikzer

0

检查您的网络托管的PHP版本。您只能从PHP 5.4设置response codes。编辑:我今天遇到了完全相同的问题。邮件出去了,PHP返回了500响应。我试图在PHP 5.5.21上运行另一台服务器上的代码,它的工作完美无瑕。