Symfony HTTP响应不包含指定的正文

时间:2019-01-14 14:10:07

标签: javascript php symfony httpresponse

我正在使用以下javascript代码执行HTTP请求:

function ready(path) {
    fetch(path, {method : 'put'})
        .then(function (response) {
            console.log(response);
        });
}

此请求在我的服务器上触发以下功能:

/**
 * @Route("/some/route/{playerName}", name="ready")
 * @param $playerName string
 */
public function toggleReady($playerName) {
    $this->someService->readyUp($playerName);

    $response = new Response(
        'TOGGLE SUCCESS!',
        Response::HTTP_OK,
        array('content-type' => 'text/html'));
    $response->send();
}

在客户端,正在调用then并在控制台中打印响应。该响应包含正确的状态码,但主体为空,bodyUsedfalse。如何将所需的内容/正文正确发送到前端?

2 个答案:

答案 0 :(得分:1)

我认为您必须这样做:

fetch(path, {method : 'put'})
  .then(response => response.json())
  .then(data => {
    // Here's the content of the body
    console.log(data)
});

“结果,我们请求的内容作为可读流隐藏在主体中。我们需要调用适当的方法,以将该可读流转换为我们可以使用的数据。

在使用GitHub的情况下,我们知道响应为JSON。我们可以调用response.json来转换数据。

还有其他方法可以处理不同类型的响应。如果请求XML文件,则应调用response.text。如果您要请求图片,请致电response.blob。”

请参见https://css-tricks.com/using-fetch/

答案 1 :(得分:1)

由于您的Content-Type标头是text/html,因此您应该使用.text()方法将响应主体解析为文本,该方法返回一个Promise:

fetch(path, { method: 'put' })
  .then(response => response.text())
  .then(body => console.log(body))
  .catch(err => console.error(err));

此外,text/plaintext/html更准确