$ .post不提交数据

时间:2010-10-20 05:48:49

标签: php javascript jquery ajax post

$("#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在root中,它包含:

<?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);

}

?>

我看到nameemail警报包含正确的数据,但数据警报为空,只显示Data Loaded:,因此我猜测数据未正确提交。

我该如何解决?

非常感谢!

3 个答案:

答案 0 :(得分:1)

“数据”回调是您要发布的表单回复的内容。因此,它的内容取决于mailer.php应该响应的内容。


编辑: mailer.php中没有'echo / print',所以你无法知道邮件是否成功。除了您没有清理内容或检查有效的电子邮件地址这一事实外,您应该在最后回应基本的成功或真实或虚假的消息,这样您就可以告诉您的JavaScript该做什么。

所以,像

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

然后,在你的js回调中

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

编辑#2:Submit输入元素实际上是否具有'submit'的名称?你可能只是每次isset()检查失败。

答案 1 :(得分:0)

看起来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();
    ...

答案 2 :(得分:0)

刚刚添加return false;并且它有效! :)