【问题标题】:Fetch API POST request response returns empty textFetch API POST 请求响应返回空文本
【发布时间】:2020-04-28 21:07:26
【问题描述】:

我正在尝试获取我通过 fetch() 发送的发布请求的响应,但结果返回一个空文本。

JS:

async getTotalCompletionTimes()
{
    var res = await fetch("repository/maps.php?method=getcompletiontimes&map="+this.getName(), {method: 'POST'});
    const result = await res.text();
    return result;
}

PHP

<?php
require_once("user.php");
if($_SERVER["REQUEST_METHOD"] == "POST")
{
<some code>
else if(isset($_POST["method"]) && $_POST["method"] == "getcompletiontimes" && isset($_POST["map"]))
{
    $times = 0;
    $users = glob('../users/*', GLOB_ONLYDIR);
    foreach($users as $u)
    {
        if(!file_exists($u."/maps.json")) continue;
        $json = json_decode(file_get_contents($u."/maps.json"), true);
        foreach($json as $map => $v)
        {
            if($map == $_POST["map"])
            {
                $times += $v;
            }
        }
    }
    echo $times;
}
<some other code>
?>

我在 cmd 中使用 curl 测试了 php 响应: curl -X POST localhost/game/repository/maps.php -d "method=getcompletiontimes&map=map_1" 并返回“2”作为响应。

【问题讨论】:

    标签: javascript php fetch-api


    【解决方案1】:

    对服务器的 curl 请求是 HTTP POST 请求,内容类型为 application/x-www-form-urlencoded,数据传输方式类似于浏览器提交 HTML 表单的方式。 该请求数据包含'method''map'参数。

    但是,在 fetch 实现中,'method''map' 参数作为 URL 查询参数发送。这样它们在$_POST 全局数组中不可用,但在$_GET 全局数组中可用。

    您可以将'method''map' 参数以与curl 类似的方式发送到服务器,方法是将fetch 初始化数据的body option 设置为包含包含这两个参数的表单数据。

    async getTotalCompletionTimes()
    {
        const fd = new FormData();
        fd.append("method", "getcompletiontimes");
        fd.append("map", this.getName());
        const res = await fetch(
          "repository/maps.php",
          {
            method: "POST",
            body: fd
          });
        const result = await res.text();
        return result;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-14
      • 1970-01-01
      • 2020-09-02
      相关资源
      最近更新 更多