我知道以前已经回答过这个问题,但是我似乎仍然找不到适合我的解决方案。我有一个表单提交不适用于ajax调用。我很确定它不是HTML或PHP,因为如果我直接执行php,一切都会很好。但是,当通过ajax进行操作时,我得到了控制台日志消息,并且执行了成功块,但从未收到电子邮件。任何帮助将不胜感激
我的Java脚本功能
$('#ajax-contact').submit(function(event){
console.log(event)
event.preventDefault();
var firstname = $('#fname');
var lastname = $('#lname');
var subject = $('#subject');
var body = $('#body');
console.log(firstname);
console.log(lastname);
console.log(subject);
console.log(body);
$.ajax({
method: "POST",
URL: "send_mail.php",
data: "firstname=" + firstname + "&lastname=" + lastname + "&subject=" + subject + "&body=" + body,
success: function(){
$("#ajax-contact").trigger("reset");
window.alert("Message Successfully Sent");
}
});
});
和php文件
<?php
$to = "xxxxxxx";
$subject = $_POST["subject"];
$body = "Message from ".$_POST["firstname"]." ".$_POST["lastname"]." \r\n ".$_POST['body'];
if (mail($to, $subject, $body)) {
echo('Email successfully sent!');
return("success");
} else {
echo('Error Failed...');
return("Error");
}
?>
答案 0 :(得分:1)
如果数据包含影响解析的特殊字符,则需要正确编码数据(这在body
参数中尤其可能)。可以使用serialize()
方法从以下形式获取所有输入:
data: $(this).serialize(),
或传递一个对象,jQuery将自动将其序列化:
data: { firstname: firstname, lastname: lastname, subject: subject, body: body},
在ES6中,您可以将其简化为:
data: {firstname, lastname, subject, body},