为什么这个ajax调用正确的php脚本没有返回任何东西?

时间:2011-08-10 23:10:18

标签: php javascript jquery ajax

我有这个AJAX:

function sendMail () {
        $.post('php/sendMail.php', function(result){
            alert(result);
        })
    }

$('#submitContact').click(function(){
        sendMail();
    })

和这个PHP:

<?php

$trimmed = array_map('trim', $_POST);

$message = $trimmed['message'];
$email = $trimmed['email'];
$name = $trimmed['name'];

if (empty($message)) {
    $message = FALSE;
}

if (empty($email)) {
    $message = FALSE;
}

if (empty($name)) {
    $message = FALSE;
}

if ($message && $email && $name){

    $body = "From: $name.\n \n $message";

    mail(/*some email*/, 'Website Contact Form Submission', $body, "From: $email");

    echo ('success');

}

echo($message.' '.$email.' '.$name);

?>

定义了所有定义的html元素。当我运行它时,所有返回的是一个空白警告框(意味着PHP脚本没有打印出成功)。知道为什么不发邮件吗?

4 个答案:

答案 0 :(得分:4)

您似乎没有使用POST发送任何数据。

如果您要提交表单,请尝试以下操作:

$.post('php/sendMail.php',$('form').serialize(), function(result){
        alert(result);
    })

编辑:正如Tomalak在评论中正确指出的那样,您需要指定要序列化的表单。我通常会给表单id并使用: - $('#myform').serialize()

答案 1 :(得分:1)

您没有向该网址发送任何数据。

答案 2 :(得分:1)

您看到空警报框的原因是$email$name为空,因为您没有传递任何$_POST变量。
当你回应它时,$message = FALSE是空白的 尝试更改此行

echo($message.' '.$email.' '.$name);

var_dump($message.' '.$email.' '.$name);

你会看到$message.' '.$email.' '.$name的价值。

答案 3 :(得分:0)

  

知道它为什么不发送邮件?

简单地说,你没有要求


$.post的语法是:

  

jQuery.post(url,[data,] [success(data,textStatus,jqXHR),] [dataType])

jQuery的工作方式,你可能跳过data参数并仍提供以下参数,但在这种情况下,你只是没有传递任何数据让你的PHP脚本工作用。

假设#submitContact是您要提交的表单中的按钮,您应该序列化该表单的内容并将其作为POST数据发送:

function sendMail($form) {
    $.post('php/sendMail.php', $form.serialize(), function(result) {
        alert(result);
    });
}

var $btn = $('#submitContact');
var $frm = $btn.parents('form');
$btn.click(function() {
    sendMail($frm);
});

The documentation is your friend. Use it.


注意:我的一些变量开头的$是故意的; jQuery对象的名称以$开头是个人选择我的代码。)