ajax不调用php,直接调用php可以工作

ajax不调用php,直接调用php可以工作,php,html,ajax,Php,Html,Ajax,我知道这个问题以前已经得到了回答,但我似乎仍然找不到一个适合我的解决方案。我有一个表单提交,它不能使用ajax调用。我很确定这不是HTML或PHP,因为如果我直接执行PHP,一切都会很好。但是,在使用ajax时,我会收到控制台日志消息,并执行成功块,但我从未收到电子邮件。任何帮助都将不胜感激 我的java脚本函数 $('#ajax-contact').submit(function(event){ console.log(event) event.preventDefault(

我知道这个问题以前已经得到了回答,但我似乎仍然找不到一个适合我的解决方案。我有一个表单提交,它不能使用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");
}

?>

数据需要正确编码,以防它包含影响解析的特殊字符(这在
正文
参数中尤其可能)。使用
serialize()
方法从表单获取所有输入:

data: $(this).serialize(),
或传递jQuery将自动序列化的对象:

data: { firstname: firstname, lastname: lastname, subject: subject, body: body},
在ES6中,您可以将其简化为:

data: {firstname, lastname, subject, body},

应该是
url
而不是
url
下次检查浏览器中的开发者工具,看看它是否发出了网络请求。你需要更改为json数据,没有url查询内容这是一种不好的做法。是的,它发出了网络请求,就像我在帖子中说的,它返回成功块消息,因此我不得不认为它在执行时没有发生任何真正糟糕的事情。您需要正确编码
数据
参数,以防它们包含特殊字符。最好的方法是传递一个对象,jQuery将自动对其进行编码。如果没有,则需要调用
encodeURIComponent(body)