Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在php文件中获取axios POST方法的属性_Javascript_Php_Axios - Fatal编程技术网

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

Javascript 无法在php文件中获取axios POST方法的属性,javascript,php,axios,Javascript,Php,Axios,我尝试用php和axios发送邮件。我将数据存储在一些属性上,然后尝试通过axios调用post方法。无法发送带有空值的电子邮件。看起来我无法在php中获取此值 // js axios .post("./vendor/sendmail.php", { name: nameInput.value, email: emailInput.value, message: textarea.value }) .then

我尝试用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");
?>
//js
axios
.post(“./vendor/sendmail.php”{
名称:nameInput.value,
电子邮件:emailInput.value,
消息:textarea.value
})
.然后(回复=>{
控制台日志(响应);
})
.catch(错误=>{
console.log(错误);
});
//php
我在我的收件箱里收到了这个:

电邮:

姓名:

信息:


(带有空值的电子邮件)

Axios可能将其编码为JSON。您需要将输入读入PHP,而不是
$\u POST
变量。给我一分钟,去挖一些代码


它所做的是检测
内容类型
标题,如果它是
应用程序/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 [];
}

观察浏览器控制台中的“网络”选项卡,单击请求,然后向下滚动标题,以验证发送的内容。还可以尝试
var\u转储($\u请求)
查看PHP文件接收的内容。@aynbe它是一个空数组:
数组(0){}
是否检查浏览器中的“网络”选项卡以确保发送了post值?请求是否被重定向到任何地方?是的,我在“请求有效负载”部分的“网络”选项卡中检查了请求。我的所有值都在一个对象中。它不是重定向。请求URL是php文件。修改superglobals是一个非常复杂的过程,因为您将覆盖
$\u POST
中已有的所有数据。还有,为什么要使用getallheaders()?内容类型头在
$\u服务器['HTTP\u Content\u Type']
中可用。当然,我同意你的看法。这是从我5年前或者7年前创建的一个项目中撕下来的。我已经编辑了我的答案。谢谢你的回答,但我不明白。你是说我用axios发送的值是正确的还是什么?我尝试了
$data=json\u decode(file\u get\u contents('php://input",对),成功了!