2013-07-11 40 views
0

我的网站上的表单是一个简单的联系表单。 我会等形式显示在发送的形式在同一页上“成功&失败”消息/失败,没有重新加载页面。我明白我应该使用Ajax来做到这一点,但我无法使它工作。它一直说失败,但形式发送,并在我的收件箱。Ajax表单成功和失败消息不起作用

这是我正在使用的代码。

HTML(单页设计):

<form accept-charset="UTF-8" action="" class="form" id="contactus" method="post" name="contactus"> 
    <label for="nametag">Namn*</label> <input id="name" name="name" type="text" value=""> 
    <label for="emailtag">Email*</label> <input id="email" name="email" type="text" value=""> 
    <label for="phonetag">Telefon</label> <input id="phone" name="phone" type="text" value=""> 
    <label for="messagetag">Meddelande*</label><br> 
    <textarea id="message" name="message" style="width: 87%; height: 200px;"></textarea> 
<label class="placeholder">&nbsp;</label> <button class="submit" name="submit">Skicka</button> 
</form> 

<script> 

     $(function() { 
       $('#contactus').submit(function (event) { 
        event.preventDefault(); 
        event.returnValue = false; 
        $.ajax({ 
         type: 'POST', 
         url: 'php/mail.php', 
         data: $('#contactus').serialize(), 
         success: function(res) {alert(res); 
          if (res == 'successful') { 
           $('#status').html('Sent').slideDown(); 
          } 
          else { 
           $('#status').html('Failed').slideDown(); 
          } 
         }, 
         error: function() { 
          $('#status').html('Failed').slideDown(); 
         } 
        }); 
       }); 
      }); 
</script> 

PHP的:

<?php 
    $name = $_POST['name']; 
    $email = $_POST['email']; 
    $phone = $_POST['phone']; 
    $message = $_POST['message']; 
    $recipient = "[email protected]"; 
    $subject = "Webbkontakt"; 
    $formcontent = "Från: $name <br/> Email: $email <br/> Telefon: $phone <br/> Meddelande: $message"; 

    $headers = "From: " ."<[email protected]>" . "\r\n"; 
    $headers .= "Reply-To: ". "[email protected]" . "\r\n"; 
    $headers .= "MIME-Version: 1.0\r\n"; 
    $headers .= "Content-Type: text/html; charset=utf-8\r\n"; 

    if(mail($recipient, $subject, $formcontent, $headers)) 
    { 
     echo "successful"; 
    } 
    else 
    { 
     echo "error"; 
    } 
?> 
+0

什么是从服务器的AJAX调用的响应? – David

+0

对不起,作为noob,但我该如何检查?我对此很陌生。 – user2566091

+1

'alert(res)'显示什么? –

回答

0

把@符号在邮件的前面。如果邮件已成功接受投递,返回TRUE,否则返回FALSE。重要的是要注意,仅仅因为邮件被接受发送,并不意味着邮件实际上会到达预定的目的地。换句话说,如果电子邮件已发送,则无法使用PHP进行检测。

if(@mail($recipient, $subject, $formcontent, $headers)) 
{ 
    echo "successful"; 
}else{ 
    echo "error"; 
} 

然后改变成功和错误在AJAX如下:

success: function(res) { 
    if (res != "successful") { 
     $('#status').html('Failed').slideDown(); 
    } else { 
     $('#status').html('Sent').slideDown(); 
    } 
}, 

error: function(XMLHttpRequest, textStatus, errorThrown) { 
    alert("Error From AJAX"); 
}, 
+0

我现在这样做了。你能看看最上面的链接吗? – user2566091

+0

你知道你的消息文本框在窗体右边的另一个div里吗?另外,你仍然错误? – Matto

+0

我移动了文本框,并且我仍然在页面上显示文本“失败”,但弹出窗口显示成功。窗体出现在我的收件箱中。 – user2566091