duanchongzi9997 2019-04-22 03:33 采纳率: 0%
浏览 812
已采纳

为什么PHP无法从Js FormData获取$ _POST数据?

I want to send JSON data (in this case is client timestamp) to my server. However, my code seem doesn't work as I expect.

My idea is using fetch to send FormData (which contain an input has JSON as value) to the PHP. At the server side, PHP will take care the form with $_POST and return JSON string to me.

I'm using a free host service, which has PHP 7.0, for testing stuff.

All of the code below is in the same file (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) { }

As you can see, the output of var_dump is an empty array. But what I expect to see is an output with a JSON string.

I've tried another way, which is this one fetch-api-json-php, but it also no use. All the resource I found on the Internet usually about the classic AJAX, not fetch API. And most of them are only for client side, there isn't much I could find for PHP/server side.

  • 写回答

2条回答 默认 最新

  • dongwen5019 2019-04-22 06:45
    关注

    Can you try to run this code in your local machine?

    Make a file name 55788817.php and paste this code and run.

      <?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>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签天线)
  • ¥15 机器人轨迹规划相关问题
  • ¥15 word样式右侧翻页键消失