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

为什么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条)

报告相同问题?

悬赏问题

  • ¥20 keepalive配置业务服务双机单活的方法。业务服务一定是要双机单活的方式
  • ¥50 关于多次提交POST数据后,无法获取到POST数据参数的问题
  • ¥15 win10,这种情况怎么办
  • ¥15 如何在配置使用Prettier的VSCode中通过Better Align插件来对齐等式?(相关搜索:格式化)
  • ¥100 在连接内网VPN时,如何同时保持互联网连接
  • ¥15 MATLAB中使用parfor,矩阵Removal的有效索引在parfor循环中受限制
  • ¥20 Win 10 LTSC 1809版本如何无损提升到20H1版本
  • ¥50 win10 LTSC 虚拟键盘不弹出
  • ¥30 微信小程序请求失败,网页能正常带锁访问
  • ¥15 Matlab求解微分方程,如何用fish2d进行预优?