2013-04-02 28 views
2

基於此question我不得不重寫我的聯繫表格腳本。 目標是讓發送按鈕標記爲send。點擊後,它應該顯示sending,直到php腳本完成。完成後應該顯示sent通過jQuery提交聯繫表格時出錯ajax

這就是我的簡單形式:

<form id="contactForm" action="mail.php" method="post"> 
    <input type="text" id="name" name="name" placeholder="Name" required><br /> 
    <input type="text" id="email" name="email" placeholder="Mail" required><br /> 
    <textarea name="message" id="message" placeholder="Nachricht" required></textarea><br /> 
    <button name="submit" type="submit" id="submit">send</button> 
</form> 

下面是標籤改變和AJAX提交jQuery腳本。

<script> 
      $(init); 
      function init() { 
       $('#contactForm').submit(submitForm); 
      } 
      function submitForm() { 
       var contactForm = $(this); 
       if (!$('#name').val() || !$('#email').val() || !$('#message').val()) { 
        $('#submit').html('error'); 
       } else { 
        $('#submit').html('sending'); 
        $.ajax({ 
         url: contactForm.attr('action') + "?ajax=true", 
         type: contactForm.attr('method'), 
         data: contactForm.serialize(), 
         success: submitFinished 
        }); 
       } 
       return false; 
      } 
      function submitFinished(response) { 
       response = $.trim(response); 
       if (response == "success") { 
        $('#submit').HTML = ('sent'); 
       } else { 
        $('#submit').html('error'); 
       } 
      } 
     </script> 

的mail.php:

<?php 

define("RECIPIENT_NAME", "John Doe"); 
define("RECIPIENT_EMAIL", "[email protected]"); 
define("EMAIL_SUBJECT", "Subject"); 

$success = false; 

$name = isset($_POST['name']) ? preg_replace("/[^\.\-\' a-zA-Z0-9]/", "", $_POST['name']) : ""; 
$email = isset($_POST['email']) ? preg_replace("/[^\.\-\_\@a-zA-Z0-9]/", "", $_POST['email']) : ""; 
$message = isset($_POST['message']) ? preg_replace("/(From:|To:|BCC:|CC:|Subject:|Content-Type:)/", "", $_POST['message']) : ""; 

if ($name && $email && $message) { 
    $recipient = RECIPIENT_NAME . " <" . RECIPIENT_EMAIL . ">"; 
    $headers = "Von: " . $name . " <" . $email . ">"; 
    $success = mail($recipient, EMAIL_SUBJECT, $message, $headers); 
} 

if (isset($_GET["ajax"])) { 
    echo $success ? "success" : "error"; 
} else { 
//add html for javascript off user 
} 
?> 

其提交正確的,我得到的郵件,但我並沒有改變的標籤貼在sendingsent。其。 任何想法或建議我的代碼有什麼問題嗎?

問候 dennym

+0

在Firebug或Dev Tools中查看請求時的輸出是什麼? –

+1

嘗試使HTML爲HTML – user1048676

+0

也嘗試並警告響應,以確保它說成功 – user1048676

回答

3

的錯誤是在這條線:

$('#submit').HTML = ('sent'); 

修改成:

$('#submit').html('sent'); 
+0

-.-這必須發生,因爲一些自動完成,不知道,但這有幫助 –

2
$('#submit').HTML = ('sent'); 

應該

$('#submit').html('sent'); 

像你有其他任何地方。

2

你必須改變

$('#submit').HTML = ('sent'); 

到:

$('#submit').html('sent'); 

在您的功能submitFinished();