#php #jquery #ajax #post
#php #jquery #ajax #Публикация
Вопрос:
jQuery:
$("#contact-us-form").submit(function () {
var nameVal = $("input[name=name]").val();
var companyVal = $("input[name=company]").val();
var titleVal = $("input[name=title]").val();
var emailVal = $("input[name=email]").val();
var phoneVal = $("input[name=phone]").val();
var messageVal = $("input[name=message]").val();
$.post("mailer.php", {
name: nameVal,
company: companyVal,
title: titleVal,
email: emailVal,
phone: phoneVal,
message: messageVal
}, function (data) {
alert("Data Loaded: " data);
$('#thanks').show();
});
return false;
});
mailer.php:
<?php
if(isset($_POST['submit'])) {
$to = "admin@domain.com";
$subject = "Inquiry";
$name = $_POST['name'];
$company = $_POST['company'];
$title = $_POST['title'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
$body = <<<HEREDOC
From: $name
Company: $company
Title: $title
E-Mail: $email
Phone: $phone n
Message: $message
HEREDOC;
echo 'success';
mail($to, $subject, $body);
} else {
echo "failure";
}
?>
Возвращается предупреждение о данных на странице failure
, я не понимаю почему!
Спасибо за вашу помощь!
Ответ №1:
Две вещи, во-первых, основная проблема заключается в том, что вы не передаете submit
переменную (если есть кнопка отправки, она не сериализуется, как в обычном сообщении), поэтому вам нужно добавить ее. Кроме того, вы действительно можете сократить свой код, используя .serialize()
для сериализации <form>
вот так:
$("#contact-us-form").submit(function () {
$.post("mailer.php", $(this).serialize(), function (data) {
alert("Data Loaded: " data);
$('#thanks').show();
});
return false;
});
Чтобы добавить туда свою submit
переменную, просто используйте .serializeArray()
и добавьте ее, сделайте это:
$("#contact-us-form").submit(function () {
var fdata = $(this).serializeArray();
fdata.push({ name: 'submit', value: true });
$.post("mailer.php", fdata, function (data) {
alert("Data Loaded: " data);
$('#thanks').show();
});
return false;
});
Комментарии:
1. … и что бы mailer.php как выглядит? Как отменить сериализацию входных данных?
2. @Nimbuz — Это не потребовало бы никаких изменений на стороне PHP 🙂
.serialize()
это просто очень быстрый способ сделать то, что вы уже делаете, он берет элементы формы и сериализует их вname=valueamp;name2=value2
и т.д…. как вы уже делаете, и как работает обычный<form>
POST без JavaScript вообще.3. Вау!! Работает просто великолепно! Огромное спасибо, Ник.
Ответ №2:
Мне кажется, что вы не отправляете значение для «submit» в mailer.php значит, ваше условие не выполняется.
Ответ №3:
Просматривая данные, которые вы передаете в свой mail.php через JS вы не передали «отправить», на котором вы основываете свое условие.
Я бы посоветовал вам передать что-то вроде:
$.post("mailer.php", {
name: nameVal,
company: companyVal,
title: titleVal,
email: emailVal,
phone: phoneVal,
message: messageVal,
action: "send-email"
}, function (data) {
alert("Data Loaded: " data);
$('#thanks').show();
});
и в вашем PHP измените условие на:
if($_POST['action'] == "send-email") {
Комментарии:
1. Используйте Firebug через Firefox, чтобы отслеживать, какие данные были отправлены за кулисами. Это даст вам представление о том, что происходит.