Форма Ajax не работает (jQuery - PHP) - PullRequest
0 голосов
/ 20 октября 2010

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, я не понимаю, почему!

Спасибо за вашу помощь!

Ответы [ 3 ]

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

Две вещи, во-первых, главная проблема в том, что нет передаваемой переменной 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;
});
0 голосов
/ 20 октября 2010

Глядя на данные, которые вы передаете в свой mail.php через JS, вы не перешли в «submit», где вы основываете свое условие.

Я бы предложил вам передать что-то вроде:

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

Мне кажется, что вы не отправляете значение "submit" в mailer.php, поэтому ваше условие не выполняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...