在PHP中,从ajax(vanilla版本)发送的数据不存储在$_POST中。

问题描述 投票:0回答:1

我有这样的JS代码()

var obj = {
        first_name: 'cholo',
        last_name: 'yologs'
};
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("post", "recv.php"); 
xmlHttp.send(JSON.stringify(obj)); // or xmlHttp.send(obj);

和PHP代码 recv.php:

<?php
   $firstName = $_POST["first_name"];
   $lastName = $_POST["last_name"];
   echo $firstName." ".$lastName; 
?>

当我试图运行该页面时,它说undefined index。first_name (和 last_name). 有没有其他方法不使用 file_get_contents('php://input') 然后 json_decode() 或在PHP中发送数据 FormData 对象,但要将发送的数据存储到 $_POST 自动?

编辑:我还想知道为什么我不能通过 $_POST 就像把数据通过 form

javascript php ajax post
1个回答
0
投票

如果你想发送一个JSON-字符串表示,你的PHP文件应该是 json_decode 来将其转换为StdObject。

<?php
    $json = file_get_contents('php://input');
    $data = json_decode($json);
    echo $data->first_name ." ". $data->last_name;

和JavaScript。

const obj = {
  first_name: "cholo",
  last_name: "yologs"
};

// FETCH

fetch("recv.php", {method: 'POST', body: JSON.stringify(obj)})
  .then(res => res.text())
  .then(data => {
    console.log(data);   // "cholo yologs"
  });

否则,我建议使用JavaScript FormData。

PHP文件。

<?php
   $firstName = $_POST["first_name"];
   $lastName  = $_POST["last_name"];
   echo $firstName ." ". $lastName; 

JavaScript。

const obj = {
  first_name: "cholo",
  last_name: "yologs"
};

// Convert your Object literal to FormData

const FD = new FormData();
Object.entries(obj).forEach(([p, v]) => FD.append(p, v));

// XHR

const xmlHttp = new XMLHttpRequest();
xmlHttp.addEventListener("load", () => {
  if (xmlHttp.status == 200) {
    console.log(xmlHttp.responseText);   // "cholo yologs"
  } else {
    console.error("Error!");
  }
});
xmlHttp.open("post", "recv.php");
xmlHttp.send(FD); // Send the FormData

你应该看到最后 "cholo yologs" 在控制台中。

你可以使用Fetch API代替XMLHttpRequest。

const obj = {
  first_name: "cholo",
  last_name: "yologs"
};

// Convert your Object literal to FormData

const FD = new FormData();
Object.entries(obj).forEach(([p, v]) => FD.append(p, v));

// FETCH

fetch("recv.php", {method: "POST", body: FD})
  .then(res => res.text())
  .then(data => {
    console.log(data);   // "cholo yologs"
  });
© www.soinside.com 2019 - 2024. All rights reserved.