什么';我的AJAX联系人表单有什么问题?(php邮件())

什么';我的AJAX联系人表单有什么问题?(php邮件()),php,jquery,ajax,email,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",

我已经使用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;
有什么想法吗?我知道我不会删减我的$message,我会的,但我只发送一个单词的测试邮件

所有变量都来自HTML表单,并以这种方式在jQuery脚本中注册-var address=$(“#cmail address”).val()。无论如何,这和我的问题无关,因为我得到了很好的回复


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

您使用$\u POST变量,但使用GET方法发送它们。

您的回调函数应该与PHP文件的输出有关。您只是在javascript作用域中警告相同的字符串

    success: function(dataOut) {  
        alert(dataOut);    
        jQuery('#ok').html("<h2>Contact Form Submitted!</h2>")
}  
成功:函数(数据输出){
警报(数据输出);
jQuery('#ok').html(“已提交联系人表单!”)
}  
当然,您需要PHP来响应某些内容。可以像“已发送”或“未发送”一样简单,直到您稍后细化内容,也可以就是您想要显示的消息。在您尝试发送邮件之前,还要回显一些内容。它可以帮助确定问题在于实际发送邮件,而不是使用ajax

正如一位评论者所提到的,像“?a=1&b=2&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>");});
$.post(“sendmail.php”,
{地址:地址,标题:标题,名称:名称…},
函数(d){alert(d);$(“#ok”).html(“+d+”);});
最后几点是建议,它们不太可能是问题的原因,但可能更容易找到问题的原因


什么是不起作用的?您的PHP已被访问,但电子邮件根本不发送?

这可能有点冒险,但您是否尝试发送到其他电子邮件地址?PHP send mail使用发送mesage的服务器的头(例如apache)。因此,当您单击“发送”时,mail()函数会附加一条“x-sender:apache”消息

某些邮件服务器不接受来自未经身份验证的服务器的邮件

当我在本地开发时,我尝试向我的gmail发送邮件,它可以工作,使用我们公司的电子邮件发送到一个黑洞中

编辑-哦,对不起-你已经说过了。尝试回显$\u请求以确保正确发送所有变量。放入打印请求($);模具();在send_mail.php中,然后观察结果

哦!!顺便说一句换你的

$_POST

我以前有过这个问题。就像下面的投票结果一样,您可能实际上没有发送POST变量,因为您使用GET格式传递参数

 $emailTo = trim($_REQUEST['address']);
 $subject = trim($_REQUEST['title']);;
 $name = trim($_REQUEST['name']);
 $emailFrom = trim($_REQUEST['mail']);
 $message = $_REQUEST['message'];
也尝试

 print_r($_REQUEST); die();
看到它被传递进来

编辑2:

根据您的评论,查看此图了解如何使用firebug

第一行中的变量来自哪里?来自HTML表单,正如我前面提到的,我对类似于?address=something&?title=something&(…)的字符串感到警惕,所以我认为这不是问题所在?这不是问题所在,但使用类似{address:address,title:title}的对象文字来列出数据可能会更清楚.您是否在没有启用AJAX的普通PHP的情况下对其进行了测试?它是这样工作的吗?你需要准确地解释“似乎不工作”的意思。你的电子邮件无法发送?顺便说一句,您可以使用:
$('#form id').serialize()将表单的所有值转换为字符串
而不是手动构建
dataString
。将$\u POST更改为$\u GET没有帮助。数据在$\u POST中,如
jQuery所示。ajax
调用问题如果您可以确认我的建议,那么您已经隔离出问题在于发送邮件,而不是使用ajax。然后也许你应该阅读PHP的邮件功能,如果需要的话,可以问一个关于PHP邮件的问题(不是关于ajax)。此时此刻,我已切换到$.post并仍在战斗.Af,我不知道为什么,但使用您的方法,我一直收到空警报。所以没有数据发送到PHP脚本。你在回音里放了什么东西吗?还是只是一个空白?据我所知,我们没有确认你没有发送任何东西。我们确认您只输出一个空格。放置echo_r($_POST)以获得POST阵列的完整视图此文件如何使用ajax打印antyhing?我的意思是,在提交表单后,我没有被重定向到此文件,因此我没有得到任何输出,也无法看到“print\u R($\u请求)我猜。你有FireBug插件吗?我强烈建议你安装它。打开FB,切换到“网络”选项卡并单击按钮。从那里你可以阅读请求的帖子和回复标题。你可以看到发生了什么。
 $emailTo = trim($_REQUEST['address']);
 $subject = trim($_REQUEST['title']);;
 $name = trim($_REQUEST['name']);
 $emailFrom = trim($_REQUEST['mail']);
 $message = $_REQUEST['message'];
 print_r($_REQUEST); die();