无法在php文件中的axios POST方法上获取属性

时间:2019-07-15 14:04:49

标签: javascript php axios

我尝试用php和axios发送邮件。我将数据存储在某些属性上,然后尝试通过axios调用post方法。电子邮件已发送但值为空。看来我无法在php中获得此值。

// js  
axios
      .post("./vendor/sendmail.php", {
        name: nameInput.value,
        email: emailInput.value,
        message: textarea.value
      })
      .then(respond => {
        console.log(respond);
      })
      .catch(error => {
        console.log(error);
      });

// php
<?php
    $email = $_POST['email'];
    $message = $_POST['message'];
    $name = $_POST['name'];
    $body = "Email: {$email}\n\nName: {$name}\n\nMessage: {$message}\n\n";
    mail("myemail@gmail.com", 'A new message', $body, "From: test@gmail.com");
?>

我在收件箱中收到此邮件:

电子邮件:

名称:

消息:

(带有空值的电子邮件)

1 个答案:

答案 0 :(得分:1)

Axios可能会将其编码为JSON。您需要将输入读入PHP,而不是$_POST变量。给我一点时间,准备研究一些代码。


它的作用是检测Content-Type标头,如果它是application/json,它将把输入读入PHP并解码。可以使用try / catch,以防JSON无效。

function convertInput() {
  if (!empty($_SERVER["HTTP_CONTENT_TYPE"])) {
    $contentTypes = explode(";", $_SERVER["HTTP_CONTENT_TYPE"]);

    if (in_array("application/json", $contentTypes)) {
      $rawInput = file_get_contents('php://input');
      return json_decode($rawInput, true);
    }
  }

  return [];
}