2010-08-11 4 views
0

J'utilise ajax pour soumettre un contact depuis sans recharger la page, ça marche bien pour la plupart sauf quand j'essaye d'envoyer le corps du message rien n'est envoyé. Les parties à et à sujet fonctionnent bien, c'est juste quand le corps essaie d'être envoyé que je ne vois rien. Je l'ai testé fonctionnant avec une fonction PHP et le corps fonctionne, juste la page se recharge et je ne sais pas pourquoi ça marche ici, mais pas avec ajax. Si quelqu'un pouvait faire la lumière, ce serait génial, merci.Fonction mail PHP + ajax = frustré moi

.js

$(document).ready(function() { 

    $('#submit').click(function() { 

     var contactformdata = { 
      you: $('#you').val(), 
      subject: $('#subject').val(), 
      message: $('#contactbody').val(), 
     } 


     $.ajax({ 
      url: "http://www.trenthauck.com/index.php/home/sendemail", 
      type: 'POST', 
      data: contactformdata, 
      success: function() { 
       $('#contactheader').replaceWith("<p class='header'>Thanks</p>"); 
       $('#contactform').remove(); 
       $('#contactlink').remove(); 
       $(document).scrollTop(25); 
      } 
     }); 

     return false; 
    }); 
}); 

Voici la fonction php (en utilisant CI, btw)

function sendemail(){ 
     $to = "[email protected]"; 
     $from = $this->input->post('you'); 
     $subject = $this->input->post('subject'); 
     $message = $this->input->post('contactbody'); 

     $tosend = "From: " . $from . "\nMessage: " . $message; 

     mail($to, $subject, $message); 

     $this->index(); 

    } 

Et la forme si cela aide

<div class="divider" id="contact"> 
    <p class = "header"><a id="contactheader" name="gocontact">Contact</a></p> 
    <div id = "contactform"> 
     <form method = "post" id="contactform" action="<?php site_url()?>index.php/home/sendemail"> 
      <div id ="formtitles"> 
       <p class = "info">You:</p> 
       <p class = "info">Me:</p> 
       <p class = "info">Subject:</p> 
       <p class = "info">Body:</p> 
       <input id = "submit" type="submit" value="Send" /> 
      </div> 
      <div id ="formfields"> 
       <input id="you" type="text" name="you" /><br/> 
       <p class = "info">[email protected]</p> 
       <input id ="subject" type="text" name="subject" /><br/> 
       <textarea id = "contactbody" name="contactbody"></textarea> 
      </div> 
     </form> 
    </div> 
</div> 

Merci pour l'aide

+0

Que se passe lorsque vous arrêtez avant l'appel à l'index et d'imprimer le corps du message? Vérifiez également la valeur de retour de l'appel 'mail()'. Si c'est faux, quelque chose ne va pas. (Bonne chance en pensant * que * dehors cependant, la vérification intégrée d'erreur de courrier est un peu inexistante ...) – Charles

Répondre

4

dans le jquery vous envoyez le message en utilisant la variable 'message' mais dans le php vous le récupérez en utilisant 'contactbody'.

changer le php de:

$message = $this->input->post('contactbody'); 

à:

$message = $this->input->post('message'); 
+0

Ce n'est pas le problème. Il a nommé le «corps de contact» de textarea, ce qui devrait fonctionner. – Nacho

+0

@Ignacio, je pense que c'est le problème. Ce n'est pas un problème avec le jquery qui collecte les données sur le terrain. C'est ce qu'il affiche sur le php en l'appelant «message». il pourrait changer: "message: $ ('# contactbody'). Val()," à: "contactbody: $ ('# contactbody'). Val()," dans la jquery et ça marcherait. merci pour le downvote si :) –

+0

Ne le prenez pas personnellement. Un downvote est juste "cette réponse n'est pas utile" :) Quoi qu'il en soit, j'ai relu et je pense que vous avez raison. Désolé mon ami. – Nacho