$_POST 为空,而请求有效负载显示数据,XMLHttpRequest [重复]

$_POST is empty while Request Payload shows data, XMLHttpRequest [duplicate]

提问人:Merlin the Immortal 提问时间:9/19/2023 更新时间:9/19/2023 访问量:25

问:

祝你今天开心!

我正在使用 JavaScript 函数通过 post 方法调用自制的 php 页面,但该变量仍为空。$_POST

我是PHP世界的新手,我的问题可能有点傻,但是我已经尝试调试了48小时,并且在浏览那里时,那里有很多类似的问题,但都没有解决我的问题。

代码非常复杂,但我简化了代码来调试问题,但它仍然发生。

JS 函数

function save() {
              var xhr = new XMLHttpRequest();
              xhr.open("POST", "gameapi.php/", true);
              xhr.setRequestHeader('Accept', 'application/json',);
              xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
              xhr.send(JSON.stringify({
                'saving': 1
              }));
              xhr.onload = function() {
                console.log(this.responseText);
              }
            }

游戏API.php

<?php
      echo var_dump($_POST);
?>

正如你肯定猜到的那样,这不是原始代码,并且是简化的,但响应仍然是一个空数组。

我也尝试过没有 RequestHeaders 的代码。

我期待包含,但它是一个空数组。$_POST['saving']1$_POST

此外,在 Inspect 的“网络”选项卡中,请求已成功发送,我非常确定 url 或任何内容都是正确的。

Inspect->Network->Payload:

{saving: 1}
saving:1

Inspect->Network->响应:

<pre class='xdebug-var-dump' dir='ltr'>
<small>F:\www\matches\gameapi.php:3:</small>
<b>array</b> <i>(size=0)</i>
  <i><font color='#888a85'>empty</font></i>
</pre>

我正在使用 Firefox 和本地主机

javascript php ajax post xmlhttprequest

评论


答:

2赞 Dylan KAS 9/19/2023 #1

_POST 美元的文档 (php.net)

在请求中使用 application/x-www-form-urlencoded 或 multipart/form-data 作为 HTTP Content-Type 时,通过 HTTP POST 方法传递给当前脚本的变量的关联数组。

在你的例子 () 中,你不会收到一个关联数组。application/json

您可以尝试改用:php://input

php://input 是一个只读流,允许您从请求正文中读取原始数据。如果启用了 enctype=“multipart/form-data” 选项,则 php://input 在 enctype=“multipart/form-data” 的 POST 请求中不可用enable_post_data_reading。

$data = json_decode(file_get_contents('php://input'), true);
var_dump($data);

评论

0赞 Merlin the Immortal 9/19/2023
是的,你是对的;正如我所说,我是一个初学者。感谢您的帮助!