我使用jQuery和PHP表单创建了我的第一个ajax联系人,但似乎没有用。
我的jQuery代码:
var dataString = 'address=' + address + '&title=' + title + '&name=' + name + '&mail=' + mail + '&message=' + message;
jQuery.ajax({
type: "POST",
url: "sendmail.php",
data: dataString,
success: function () {
alert(dataString);
jQuery('#ok').html("<h2>Contact Form Submitted!</h2>")
}
});
return false;
评论 - 我使用alert来显示数据字符串,它显示我的字符串,此外这个脚本总是成功并显示“提交的联系表单”。
现在sendmail.php部分(我相信这里有问题):
// getting variables from form
$emailTo = trim($_POST['address']);
$subject = trim($_POST['title']);;
$name = trim($_POST['name']);
$emailFrom = trim($_POST['mail']);
$message = $_POST['message'];
// prepare email body text
$Body = "You have a message from: ";
$Body .= $name;
$Body .= "\n";
$Body .= "\n";
$Body .= $message;
// send prepared message
$sent = mail($emailTo, $subject, $Body);
//callback for jQuery AJAX
if ($sent){
echo '';
}
else{}
有什么想法吗?我知道我不会修改我的消息,我会,但我只发送一个单词的测试邮件。
所有变量都来自HTML表单,并以这种方式在jQuery脚本中注册 - var address = $(“#cmail-address”)。val(); 。无论如何,这与我的问题无关,因为我得到了很好的回调。
顺便说一下,我的服务器允许发送消息和其他脚本的工作正常。
答案 0 :(得分:2)
您的回调函数应该与PHP文件的输出有关。您只是在javascript范围内警告相同的字符串。
success: function(dataOut) {
alert(dataOut);
jQuery('#ok').html("<h2>Contact Form Submitted!</h2>")
}
当然,你需要PHP回应一些东西。可能会像“发送”或“未发送”一样简单,直到您稍后改进内容,或者它可能正是您要显示的消息。在尝试发送邮件之前,请回显SOMETHING。它可以帮助确定问题是实际发送邮件而不是你使用ajax。
正如一位评论者提到的那样 - 像“?a = 1&amp; b = 2&amp; c = 3”这样的字符串可能适用于POST,但名称/值对{a:“cat”,b:“dog”}可能是更好的方式去。像这样的字符串是GET的风格,这可能是其他人混淆了他们的答案的原因。
我还推荐jQuery的post函数。 $ .post和$ .get更简单,覆盖了90%的典型ajax用途(包括你的!)。 $ .ajax非常适合奇怪的特殊情况
$.post("sendmail.php",
{address: address, title: title, name: name...},
function(d) {alert(d); $("#ok").html("<h2>" + d + "</h2>");});
最后几件事是建议,它们不太可能是您的问题的原因,但可能会更容易找到原因。
什么不起作用?您的PHP已到达但电子邮件根本没有发送?
答案 1 :(得分:0)
这可能是一个黑暗的镜头 - 但你尝试发送到其他电子邮件地址? PHP发送邮件使用发送消息的服务器的标头(例如apache)。因此,当您单击“发送”时,mail()函数会附加“x-sender:apache”消息。
SOme邮件服务器不接受来自未经过身份验证的服务器的邮件。
当我在本地开发时 - 我尝试向我的Gmail发送邮件并且它有效,使用我们公司的电子邮件被发送到黑洞。
编辑 - 哦对不起 - 你已经说过了。尝试回显$ _REQUEST以确保正确发送所有变量。放一个print_r($ _ REQUEST);死();在send_mail.php中然后观察结果。OH!顺便说说。切换你的
$_POST
到
$_REQUEST
我以前遇到过这个问题。就像下面的下面投票答案一样,你可能实际上并没有发送POST变量,因为你用GET格式传递了params。
$emailTo = trim($_REQUEST['address']);
$subject = trim($_REQUEST['title']);;
$name = trim($_REQUEST['name']);
$emailFrom = trim($_REQUEST['mail']);
$message = $_REQUEST['message'];
也试试
print_r($_REQUEST); die();
看到它已经过去了。
EDIT2:
根据您的评论,请参阅此图片,了解您如何使用firebug
答案 2 :(得分:-1)
你使用$ _POST变量,但是用GET方法发送它们。