Спасибо, что нашли время посмотреть, ребята. Я создаю симпатичную базовую форму контакта AJAX с помощью jQuery. Письмо отправляется, но после открытия электронной почты нет данных POST, поэтому я просто получаю строки, определенные в PHP-скрипте. На почтовом клиенте моего телефона содержимое письма буквально говорит «undefined». Я попытался добавить разные типы данных заголовка безрезультатно, а также ряд вариантов функции PHP mail ().
Я более чем готов принять более легкое решение для простой формы AJAX, поэтому заранее заблаговременно за любые новые подходы.
Вот форма:
<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>
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; }); });
PHP-скрипт (внешний файл «email.php»):
<?php if($_POST){ $name = $_POST['form_name']; $email = $_POST['form_email']; $message = $_POST['form_msg']; //send email mail("email@gmail.com", "This is an email from:" .$email, $message); } ?>
Нет необходимости создавать строку запроса. Просто поместите свои значения в объект, и jQuery позаботится о вас для остальных.
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); } });
Оставьте свой код email.php тем же, но замените этот код JavaScript:
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); } });
с этим:
$.ajax({ type: "POST", url: "email.php", data: $(form).serialize(), success: function(){ $('.success').fadeIn(1000); } });
Чтобы имена ввода формы совпадали.
Вы используете неправильные параметры сообщений:
var dataString = 'name='+ name + '&email=' + email + '&text=' + text; ^^^^-$_POST['name'] ^^^^--$_POST['name'] etc....
Идентификаторы javascript / html не имеют отношения к фактическому POST, особенно когда вы создаете свою собственную строку данных и не используете те же идентификаторы.
Вы используете неправильное имя параметра, попробуйте:
if($_POST){ $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['text']; //send email mail("j.andrew.sears@gmail.com", "51 Deep comment from" .$email, $message); }
Ваш PHP-скрипт (внешний файл «email.php») должен выглядеть так:
<?php if($_POST){ $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['text']; //send email mail("j.andrew.sears@gmail.com", "51 Deep comment from" .$email, $message); } ?>
Код должен быть:
<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); } });
PHP:
<?php if($_POST){ $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['text']; //send email mail("email@gmail.com","My Subject:",$email,$message); } ?>