我的AJAX联系表格有什么问题? (php mail())

时间:2010-11-23 20:14:55

标签: php jquery ajax email

我使用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(); 。无论如何,这与我的问题无关,因为我得到了很好的回调。

顺便说一下,我的服务器允许发送消息和其他脚本的工作正常。

3 个答案:

答案 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方法发送它们。