jquery
  • forms
  • email
  • 2016-02-04 80 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,除非你實際上檢查電線,看看是怎麼回事。我建議使用一些郵件庫,它有一些指示是否發送郵件(如果存在)

    相關問題