简体   繁体   English

从 ajax(香草版)发送的数据不会存储在 PHP 的 $_POST 中

[英]sent data from ajax (vanilla version) doesn't store in $_POST in PHP

I have this JS code ()我有这个 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);

and PHP code recv.php :和 PHP 代码recv.php

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

When I tried to run the page it says undefined index: first_name (and last_name ).当我尝试运行该页面时,它显示 undefined index: first_name (和last_name )。
Is there other method without using file_get_contents('php://input') then json_decode() in PHP or sending data in FormData object in JS but to store sent data to $_POST automatically?是否有其他方法不使用 PHP 中file_get_contents('php://input')然后json_decode()或在 JS 中的FormData object 中发送数据但自动将发送的数据存储到$_POST

Edit:编辑:
I also wanted to know why I can't access through $_POST just like sending the data through a form我也想知道为什么我不能像通过form发送数据一样通过$_POST访问

If you want to send a JSON-String representation, your PHP file should json_decode to convert it to a StdObject:如果您想发送 JSON 字符串表示,您的 PHP 文件应该json_decode以将其转换为 StdObject:

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

and the JavaScript:和 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" });

Otherwise, I suggest to use JavaScript FormData:否则,我建议使用 JavaScript FormData:

PHP file: PHP 文件:

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

JavaScript: 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

you should see finally "cholo yologs" in console.您最终应该会在控制台中看到"cholo yologs"

Instead of XMLHttpRequest you could use the Fetch API:您可以使用 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"
  });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM