ajax不调用php,php直接调用时工作

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (144)

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

?>
提问于
用户回答回答于

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

data: $(this).serialize(),

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

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

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

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

扫码关注云+社区

领取腾讯云代金券