为什么PHP不能从Js FormData Fetch获取$_POST数据?

2022-05-28 00:00:00 php fetch-api form-data
我希望将JSON数据(在本例中是客户端时间戳)发送到我的服务器。然而,我的代码似乎没有像我预期的那样工作。

我的想法是使用FETCH将FormData(其中包含一个值为JSON的输入)发送到PHP。在服务器端,PHP会处理$_POST的表单,并将JSON字符串返回给我。

我使用的是一个免费的主机服务,安装了PHP7.0,用来测试东西。

下面的所有代码都在同一个文件(404.php)中:

var now = new Date();

var pkg = JSON.stringify({
    ts: now.getTime(),
    tz: now.getTimezoneOffset() / -60
})

var form = new FormData();
form.set('json', pkg);

console.log(form.has('json')) // true
console.log(form.values().next()) // return and obj contain JSON string

fetch('/404.php', {
    method: 'POST',
    body: form
});
$json = null;
if(isset($_POST['json'])) $json = json_decode($_POST['json']);

var_dump($_POST); //Result: array(0) { }

如您所见,var_ump的输出是一个空数组。但我希望看到的是带有JSON字符串的输出。

我试过另一种方法,就是这个fetch-api-json-php,但也没有用。我在网上找到的所有资源通常都是关于经典的AJAX,而不是FETCH API。而且大部分都是针对客户端的,对于PHP/服务器端,我找不到太多。


解决方案

是否可以尝试在本地计算机上运行此代码?

创建名为55788817.php的文件并粘贴此代码并运行。

  <?php
  if (isset($_POST) && !empty($_POST)) {
    $json = null;
    if(isset($_POST['json'])) $json = json_decode($_POST['json']);

    var_dump($_POST); //Result: array(1) { ["json"]=> string(29) "{"ts":1555915560755,"tz":5.5}" }
    exit;
  }
  ?>
  <!DOCTYPE html>
  <html>
  <head>
    <title></title>
  </head>
  <body>
    <button type="button" id="registerButton">Click Me!</button>
    <script>
      var now = new Date();

      var pkg = JSON.stringify({
          ts: now.getTime(),
          tz: now.getTimezoneOffset() / -60
      })

      var form = new FormData();
      form.append('json', pkg);

      console.log(form.has('json')) // true
      console.log(form.values().next()) // return and obj contain JSON string
      fetch('./55788817.php', {
          method: 'POST',
          body: form
      });
    </script>
  </body>
  </html>

相关文章