$("#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);
}
?>
我看到name
和email
警报包含正确的数据,但数据警报为空,只显示Data Loaded:
,因此我猜测数据未正确提交。
我该如何解决?
非常感谢!
答案 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;
并且它有效! :)