HTTP-ответ Symfony не содержит указанное тело - PullRequest
0 голосов
/ 14 января 2019

Я использую следующий код 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 и печатается ответ в консоли. Этот ответ содержит правильный код состояния, но тело пусто, а bodyUsed равно false. Как правильно отправить желаемое содержимое / тело на внешний интерфейс?

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Поскольку ваш заголовок Content-Type равен text/html, вы должны проанализировать тело ответа как текст, используя метод .text(), который возвращает обещание:

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

Кроме того, text/plain будет более точным, чем text/html

0 голосов
/ 14 января 2019

Я думаю, вы должны сделать это:

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 /

...