提取API POST请求响应返回空文本

时间:2020-01-11 13:26:32

标签: javascript php fetch-api

我试图获取通过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”作为响应。

1 个答案:

答案 0 :(得分:0)

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

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

通过设置$_GET初始化的body option,可以将'method''map'参数以与curl类似的方式发送到服务器数据以包含包含两个参数的表单数据。

fetch