我之前发布了一个类似的问题,只是我没有意识到我放的代码中有一个明显的错误(不提供数据),我新存在。现在我正在重做它,因为我仍然遇到问题。
我有这个AJAX:
function sendMail(){
$.ajax({
type: "POST",
url: "../prestige-auto/php/sendMail.php",
data: {"message" : $('#contactMessage').html(),
"email" : $('#contactEmail').val(),
"name" : $('#contactName').val()},
success: function(result){
if (result == 'success') {
alert(result);
} else {
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脚本没有打印出成功)。知道为什么不发邮件吗?
答案 0 :(得分:1)
在回显'success'
之后你没有退出 - PHP还没有停止处理,所以它只是继续到下一行,并且也渲染出echo($message.' '.$email.' '.$name);
。
这意味着您的JS测试正在将success
与success$message $email $name
进行比较,这始终是错误的。
如果要停止处理,您有两种选择:exit
或die
(不要这样做),或将其余代码包装在else标记中,如下所示:
if ($message && $email && $name){
$body = "From: $name.\n \n $message";
mail(/*some email*/, 'Website Contact Form Submission', $body, "From: $email");
echo ('success');
} else {
echo($message.' '.$email.' '.$name);
}
另外,请确保不要使用?>
结束PHP脚本!这几乎总会导致以后PHP脚本在末尾呈现一些不需要的空白区域时出现问题,这也会失败。
答案 1 :(得分:0)
请勿使用array_map('trim', $_POST)
http://www.php.net/manual/en/function.trim.php#96246
答案 2 :(得分:0)
首先检查ajax响应以查看是否发生任何错误。