2012-06-04 23 views
1

無論用戶數據是否有效,我都會顯示一條成功消息。我有一個錯誤消息,但我無法顯示它。我不是最好的編碼器,所以要好:)獲取我的AJAX錯誤消息以顯示

此外,由於某種原因,當我通過表單收到一封電子郵件時,用戶的電子郵件以user @ MISSING_DOMAIN的身份出現。我的第一個問題是優先考慮的,所以如果它太多,你不需要幫助我。

表單代碼

<form action="contactformprocess3.php" method="post" class="myForm" > 
<input name="name" type="text" id="f1" class="name-textinput"/><br /> 
    <script type="text/javascript"> 
     var f1 = new LiveValidation('f1'); 
     f1.add(Validate.Presence); 
    </script> 

<input name="email" type="text" id="f21" class="email-textinput"/><br /> 
    <script type="text/javascript"> 
     var f21 = new LiveValidation('f21'); 
      f21.add(Validate.Presence); 
      f21.add(Validate.Email); 
      f21.add(Validate.Length, { minimum: 10, maximum: 35 }); 
    </script> 

<textarea name="message" rows="9" cols="34" id="field3" class="message-textinput"></textarea> 
    <span class="underform"> 
     <input type="reset" class="reset" /> 
     <input type="submit" value="submit" class="submit" /> 
    </span> 
</form> 

AJAX

$(function() { 
$('.myForm').submit(function(e) { 
    e.preventDefault(); 
    var form = $(this); 
    var post_url = form.attr('action'); 
    var post_data = form.serialize(); 
    $.ajax({ 
     type: 'POST', 
     url: post_url, 
     data: post_data, 
     success: function(msg) { 
      $('.success-box').fadeIn("slow").delay(3000).fadeOut("slow"); 
     }, 
     error: function(xhr, status, error, req) { 
      $('.failure-box').fadein("slow").delay(3000).fadeOut("slow"); 
     } 

    }); 
    }); 
}); 

PHP EMAIL

<?php 
$to = '[email protected]'; 
$subject = 'Piece of Me Designs'; 
$from = $_POST['email']; 
$name = $_POST['name']; 
$message = $_POST['message']; 

if (mail($to, $subject, $message, 'From: '.$name.' &lt;'.$from.'&gt;')) { 
    echo 'Message was sent successfully.'; 
} else { 
    echo 'There was a problem sending your message.'; 
} 

?>

回答

1

當它是不可能的任一接觸時發生AJAX錯誤條件服務器或th e服務器返回一個不是200的狀態代碼。這種情況是文件未找到,腳本錯誤或網絡問題,因此要獲得正確的消息,您需要驗證數據。您可以在使用AJAX之前執行此操作,以確保您發送到服務器腳本的數據已經過驗證。

此外,您還需要讓您的PHP腳本進行驗證。這是確保安全的一項好策略。

2

Ed說的是完全正確的。這意味着你正在等待ajax塊的「error:」部分,對於你來說什麼是業務規則失效(電子郵件未發送),而只有技術錯誤纔會出現在這個塊中。

關於技術觀點,業務錯誤仍然會返回「成功」;它只是你的應用程序必須處理的一個不同的「成功」答案。

所以,基本上你的解決方案是檢查回聲:

success: function(msg) { 
    if (msg == 'Message was sent successfully.') { 
     $('.success-box').fadeIn("slow").delay(3000).fadeOut("slow"); 
    } else { 
     $('.failure-box').fadein("slow").delay(3000).fadeOut("slow"); 
    } 
}, 
error: function(xhr, status, error, req) { 
    //alert the user there was a technical problem 
} 

我會建議你從你的PHP服務返回的基於XML的回聲,那麼你可以管理標籤和標準化的反應方式更容易。