1

我正在尝试创建一个具有 javascript 验证的邮件表单。表单值应使用 ajax 发送到 php 脚本,该脚本将数据通过电子邮件发送到电子邮件地址。

但是,既不会调用 php 代码、成功或错误 jquery 回调,也不会调用 chrome 中的 javascript 控制台中的任何日志。

这是我的简化 html 页面:

<form id="mail-form">
    <div class="input-row">
    <div class="label"><label for="name">Your name: *</label></div>
    <div class="input"><input type="text" name="name" id="name" maxlength="50"/></div>
        <input id="submit-button" type="submit" value="send"/>
</form>

我的JavaScript:

$(document).ready(function () {
    var form = $("#mail-form");

    form.submit(function (e) {
        e.preventDefault();
        send(form);
    }
});

function send(form) {

    var formData = { name: $("#name").val(),
        email: $("#email").val(),
        phone: $("#phone").val(),
        message: $("#message").val(),
    };

    $.ajax({
        type: "POST",
        url: "/scripts/mailer.php",
        datatype: "text",
        data: formData,
        succes: function (data) {
            onSucces();
        },
        error: function () {
            onError();
        }
    });
}

和我的简化 php 文件:

$myemail = "someone@something.com";
$subject = "test";

$message = $_POST["message"];

mail($myemail, $subject, $message);

echo "ok";

有人可以指出我做错了什么吗?我也尝试了简单的获取方法,但它们也不会到达服务器。

4

3 回答 3

2

为你的 JavaScript 试试这个;success错了,你的submit()电话中有一个毫无意义的括号:

$(document).ready(function () {
    var form = $("#mail-form");
    form.submit(function (e) {
        send(form);
        e.preventDefault();
        return(false);
    });
});
function send(form) {
    var formData = {
        name: $("#name").val(),
        email: $("#email").val(),
        phone: $("#phone").val(),
        message: $("#message").val(),
    };
    $.ajax({
        type: "POST",
        url: "/scripts/mailer.php",
        datatype: "text",
        data: formData,
        success: function(data){
            onSucces();
        },
        error: function(){
            onError();
        }
    });
}
于 2013-05-23T22:02:46.400 回答
1

您永远不应该依赖客户端的数据验证。

对于您的问题,请使用 alert 确认没有执行成功或错误回调函数。您还可以删除 dataType 以查看是否有任何区别。

你也可以这样做

var formData = form.serialize();

而不是这个

var formData = { name: $("#name").val(),
    email: $("#email").val(),
    phone: $("#phone").val(),
    message: $("#message").val(),
};
于 2013-05-23T22:02:54.033 回答
0

试试这样:

改变:

$(document).ready(function () {
    var form = $("#mail-form");

    form.submit(function () {
        e.preventDefault();
        send(form);
        }
    });
});

至:

$("#mail-form").submit(function (e) {
        e.preventDefault();
        send(form);
});

所以它看起来像这样:

$("#mail-form").submit(function (e) {
        e.preventDefault();
        send(form);
});

function send(form) {

    var formData = { name: $("#name").val(),
        email: $("#email").val(),
        phone: $("#phone").val(),
        message: $("#message").val(),
    };

    $.ajax({
        type: "POST",
        url: "/scripts/mailer.php",
        datatype: "text",
        data: formData,
        success: function (data) {
            onSucces();
        },
        error: function () {
            onError();
        }
    });
}
于 2013-05-23T21:57:30.420 回答