ajax不调用php,直接调用php即可正常工作

时间:2018-06-21 19:46:45

标签: php html ajax

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

?>

1 个答案:

答案 0 :(得分:1)

如果数据包含影响解析的特殊字符,则需要正确编码数据(这在body参数中尤其可能)。可以使用serialize()方法从以下形式获取所有输入:

data: $(this).serialize(),

或传递一个对象,jQuery将自动将其序列化:

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

在ES6中,您可以将其简化为:

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