2014-06-12 16 views
0

我想提交一個表單與Ajax,它只是不工作。問題是,它實際上告訴我,它發送的電子郵件,但是當我檢查我的電子郵件時,我什麼也沒有。當我調用Ajax方法時,它似乎停止工作。下面是代碼:表單與Ajax不發送電子郵件

HTML:

<form method="POST" id="form_contact" class="col_50"> 
    <input type="text" id="prenom_contact" name="prenom_contact" placeholder="Prénom" /> 
    <input type="text" id="nom_contact" name="nom_contact" placeholder="Nom" /> 
    <input type="text" id="email_contact" name="email_contact" placeholder="Courriel" /> 
    <textarea id="message_contact" name="message_contact" rows="6" placeholder="Votre message..."></textarea> 

    <input type="submit" id="submit_contact" name="submit_contact" value="Envoyer" /> 
</form> 

JS:

var prenom = $("#prenom_contact").val(), 
    nom = $("#nom_contact").val(), 
    email = $("#email_contact").val(), 
    message = $("#message_contact").val(); 

var error_count = 0; 

//THERE IS ADDITIONNAL CODE HERE WHO'S JUST CHECHKING IF THE VAR AREN'T EMPTY, I'M JUST NOT SHOWING IT BECAUSE I KNOW THAT IT IS WORKING 

//IF THE FORM HAS NO ERROR 
if(error_count === 0) 
{ 
    $.ajax({ 
     type: "POST", 
     url: "http://davidstpierre.ca/new/form_contact.php", 
      data: "prenom=" + prenom + "&nom=" + nom + "&email=" + email + "&message=" + message,    
     error: function() { 
      alert("Une erreur est survenue. Veuillez actualiser la page de nouveau et réessayer."); 
     }, 
     success: function() { 
      //RESET THE FORM 
      $('#prenom_contact').val(''); 
      $('#nom_contact').val(''); 
      $('#email_contact').val(''); 
      $('#message_contact').val(''); 

      alert("Good job!"); 
     } 
    }); 
} 

PHP:

<?php 
if($_POST) 
{ 
    echo "<p id='contact_success'>Succès!</p>"; 

    $prenom = $_POST['prenom_contact']; 
    $nom = $_POST['nom_contact']; 
    $email = $_POST['email_contact']; 
    $message = $_POST['message_contact'];  

    $destinataire = "[email protected]"; 
    $titre_courriel = "Un nouveau message de la part de " .$prenom." ".$nom. " sur votre portfolio."; 

    $headers = 'MIME-Version: 1.0' . "\r\n"; 
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
    $headers .= 'From: '.$prenom.' '. $nom .' <'.$email.'>' . "\r\n"; 

    $codehtml= 
    "<html><body>" . 
     "<p><strong>Nom:</strong> ".htmlspecialchars($nom)."</p>". 
     "<p><strong>Prénom:</strong> ".htmlspecialchars($prenom)."</p>". 
     "<p><strong>Adresse électronique:</strong> ".htmlspecialchars($email)."</p>". 
     "<p><strong>Commentaires:</strong> ".htmlspecialchars($message)."</p><br>" . 
    "</body></html>"; 

    if(!empty($nom) & !empty($prenom) & !empty($email) & !empty($message)) 
    { 
     if(mail($destinataire, $titre_courriel, $codehtml, $headers)) 
     { 
      return true; 
     } 
     else { 
      return false; 
     } 
    } 
    else { 
     return false; 
    } 
} 
?> 
+0

你有沒有安裝smtp服務器? – Hackerman

+0

PHP中的'return'不會執行任何輸出,所以沒有任何東西可以返回到JS客戶端。您需要輸出SOMETHING,如'echo 1'或'echo 0',甚至echo'json_encode(true)'。因爲沒有輸出,所以沒有辦法讓一個失敗的'mail()'調用告訴JS代碼什麼。除此之外,如果它返回true,你檢查了你的郵件服務器的日誌,看看PHP交出電子郵件後發生了什麼? –

回答

1

,PHP代碼查找以下參數:

  1. prenom_contact
  2. nom_contact
  3. email_contact
  4. message_contact

但對於Ajax調用您有以下:

data: "prenom=" + prenom + "&nom=" + nom + "&email=" + email + "&message=" + message 

而且,最好是使用一個對象,以便jQuery將編碼爲你:

data: { 
    prenom_contact: prenom, 
    nom_contact: nom, 
    email_contact: email, 
    message_contact: message 
}, 
+0

它的工作!非常感謝!我應該早些發佈,我浪費了很多時間在這哈哈! :P –