2013-03-08 7 views
7

Vielen Dank für die Zeit zu sehen, Jungs. Ich erstelle ein ziemlich einfaches AJAX-Kontaktformular mit jQuery. Die E-Mail sendet, aber beim Öffnen der E-Mail gibt es keine POST-Daten, also bekomme ich nur die Zeichenfolgen, die ich im PHP-Skript definiert habe. Auf dem E-Mail-Client meines Telefons sagt der Inhalt der E-Mail wörtlich "undefiniert". Ich habe versucht, verschiedene Arten von Header-Daten ohne Erfolg hinzuzufügen, und eine Reihe von Variationen der PHP mail() -Funktion.jQuery AJAX-Formular mit mail() PHP-Skript sendet E-Mail, aber POST-Daten aus HTML-Formular ist undefined

Ich bin mehr als bereit, eine einfachere Lösung für ein einfaches AJAX-Formular zu übernehmen, also danke im Voraus für alle neuen Ansätze. Hier

ist die Form:

<section id="left"> 
     <label for="form_name">Name</label> 
     <input name="form_name" id="form_name" type="text" > 

     <label for="form_email">Email</label> 
     <input name="form_email" id="form_email" type="email" > 
    </section> 

    <section id="right"> 
     <label for="form_msg">Message</label> 
     <textarea name="form_msg" id="form_msg"></textarea> 
     <input id="submit" class="button" name="submit" type="submit" value="Send"> 
    </section> 

</form> 

Die jQuery AJAX:

$(function() { 
    $("#contact .button").click(function() { 
     var name = $("#form_name").val(); 
     var email = $("#form_email").val(); 
     var text = $("#msg_text").val(); 
     var dataString = 'name='+ name + '&email=' + email + '&text=' + text; 

     $.ajax({ 
      type: "POST", 
      url: "email.php", 
      data: dataString, 
      success: function(){ 
      $('.success').fadeIn(1000); 
      } 
     }); 

     return false; 
    }); 
}); 

Das PHP-Skript (externe Datei 'email.php'):

<?php 
if($_POST){ 
    $name = $_POST['form_name']; 
    $email = $_POST['form_email']; 
    $message = $_POST['form_msg']; 

//send email 
    mail("[email protected]", "This is an email from:" .$email, $message); 
} 
?> 

Antwort

16

Sie müssen keine Abfragezeichenfolge erstellen. Stellen Sie einfach Ihre Werte in ein Objekt und jQuery kümmert sich um den Rest für Sie.

var data = { 
    name: $("#form_name").val(), 
    email: $("#form_email").val(), 
    message: $("#msg_text").val() 
}; 
$.ajax({ 
    type: "POST", 
    url: "email.php", 
    data: data, 
    success: function(){ 
     $('.success').fadeIn(1000); 
    } 
}); 
+1

Ich benutze dies und es funktioniert gut, in Kombination mit der Änderung meiner PHP-Skript wie von EmCO und Garis definiert. Danke allen! –

4

Sie‘ Verwenden Sie die falschen Post-Parameter:

var dataString = 'name='+ name + '&email=' + email + '&text=' + text; 
         ^^^^-$_POST['name'] 
             ^^^^--$_POST['name'] 
             etc.... 

Die Javascript/HTML-IDs sind für den eigentlichen POST irrelevant, insbesondere wenn Sie Ihre eigene Datenfolge erstellen und nicht dieselben IDs verwenden.

+0

Vielen Dank, das in Kombination mit dem Daten Hash funktionierte perfekt! –

0

Ihr PHP-Skript (externe Datei 'email.php') soll wie folgt aussehen:

<?php 
if($_POST){ 
    $name = $_POST['name']; 
    $email = $_POST['email']; 
    $message = $_POST['text']; 

//send email 
    mail("[email protected]", "51 Deep comment from" .$email, $message); 
} 
?> 
+0

Vielen Dank, dies in Kombination mit dem Daten Hash funktioniert perfekt! –

4

Sie sind die falschen Parameter Namen verwenden, versuchen Sie:

if($_POST){ 
    $name = $_POST['name']; 
    $email = $_POST['email']; 
    $message = $_POST['text']; 

//send email 
    mail("[email protected]", "51 Deep comment from" .$email, $message); 
} 
+0

Vielen Dank, dies in Kombination mit dem Daten Hash funktioniert perfekt! –

6

Lassen Sie Ihre email.php gleichen Code, aber ersetzen Sie diesen JavaScript-Code:

var name = $("#form_name").val(); 
     var email = $("#form_email").val(); 
     var text = $("#msg_text").val(); 
     var dataString = 'name='+ name + '&email=' + email + '&text=' + text; 

     $.ajax({ 
      type: "POST", 
      url: "email.php", 
      data: dataString, 
      success: function(){ 
      $('.success').fadeIn(1000); 
      } 
     }); 

mit diesem:

$.ajax({ 
     type: "POST", 
     url: "email.php", 
     data: $(form).serialize(), 
     success: function(){ 
     $('.success').fadeIn(1000); 
     } 
    }); 

Damit Ihre Formulareingabe Namen übereinstimmen.

+0

Platzieren Sie das Formular in Anführungszeichen im jQuery-Selektor – FrenchFalcon

1

Sie Code sollte sein:

<section id="right"> 
     <label for="form_msg">Message</label> 
     <textarea name="form_msg" id="#msg_text"></textarea> 
     <input id="submit" class="button" name="submit" type="submit" value="Send"> 
    </section> 

Js

var data = { 
    name: $("#form_name").val(), 
    email: $("#form_email").val(), 
    message: $("#msg_text").val() 
}; 
$.ajax({ 
    type: "POST", 
    url: "email.php", 
    data: data, 
    success: function(){ 
     $('.success').fadeIn(1000); 
    } 
}); 

Die PHP:

<?php 
if($_POST){ 
    $name = $_POST['name']; 
    $email = $_POST['email']; 
    $message = $_POST['text']; 

//send email 
    mail("[email protected]","My Subject:",$email,$message); 
} 
?>