$ .post не передает данные - PullRequest
       6

$ .post не передает данные

0 голосов
/ 20 октября 2010
$("#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();

    alert(nameVal);
    alert(emailVal);

    $.post("/mailer.php", {
        name: nameVal,
        company: companyVal,
        title: titleVal,
        email: emailVal,
        phone: phoneVal,
        message: messageVal
    }, function (data) {
        alert("Data Loaded: " + data);
        $('#thanks').show();
    });
});

mailer.php в корне, и он содержит:

<?php

if(isset($_POST['submit'])) {

    $to = "myemail@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;

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

}

?>

Я вижу предупреждения name и email с правильными данными, но предупреждение данных пусто, просто показываетData Loaded:, поэтому я предполагаю, что данные отправлены неверно.

Как это исправить?

Большое спасибо!

Ответы [ 3 ]

1 голос
/ 20 октября 2010

Обратный вызов «data» - это форма ответа на которую вы отправляете. Таким образом, его содержимое зависит от того, что mailer.php должен отвечать.


EDIT: В mailer.php нет «echo / print», поэтому у вас нет возможности узнать, удалось ли отправить письмо. Помимо того, что вы не дезинфицируете содержимое или не проверяете действительный адрес электронной почты, вы должны повторить базовое сообщение об успехе или истинное или ложное сообщение в конце, чтобы вы могли сказать своему JavaScript, что делать.

Итак, что-то вроде

$result = mail($to, $subject, $body);
if($result)
echo 'success';

Затем в вашем js callback

if(data=="success")
{
$('#thanks').show();
}
else{
$('#error').show();

РЕДАКТИРОВАТЬ # 2: действительно ли элемент ввода Submit имеет имя 'submit'? Возможно, вы просто не справляетесь с проверкой isset() каждый раз.

0 голосов
/ 20 октября 2010

Только что добавил return false; и все заработало! :)

0 голосов
/ 20 октября 2010

Похоже, mailer.php ничего не отвечает.Похоже, что он отправляет электронное письмо, поэтому data пусто.Тот факт, что обратный вызов post запускается, показывает, что данные были отправлены на mailer.php.

. Вы можете использовать второй аргумент обратного вызова для проверки:

, function (data, textStatus) {
        alert("Data Loaded: " + textStatus);
        $('#thanks').show();

илиточно так же, используя массив arguments:

, function () {
        alert("Data Loaded: " + arguments[1]);
        $('#thanks').show();

Если вы хотите, чтобы data действительно содержал что-то, вы можете вывести subject в mailer.php, например:

...
echo $subject;
mail($to, $subject, $body);

Теперь alert(data) должно работать.


Кроме того, обязательно запретите отправку формы по умолчанию, чтобы страница не менялась, пока это происходит:

$("#contact-us-form").submit(function (event) {
    event.preventDefault();
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...