вернуть json из потокового ответа symfony - PullRequest
1 голос
/ 03 августа 2020

У меня есть функция потокового ответа в моем контроллере, как показано ниже

/**
 * @Route("/manage/testajax", name="app_testajax")
 */
public function testAjax(Request $request)  : Response
{
    if (!$request->isXmlHttpRequest()) {
        throw new BadRequestHttpException('AJAX request expected.');
    }
 
    $response = new StreamedResponse();
    $response->setCallback(function () {
        $repeat = 4;
        for ($i = 1; $i < $repeat; ++$i) {
            echo 'Line '.$i;
            //new JsonResponse(['message' => $i, 'status' => 'success']);
            ob_flush();
            flush();
 
            if ($i < ($repeat - 1)) {
                sleep(2);
            }
        }
    });
 
    return $response;

}

и мой xml запрос как

function startStreaming(lastResponseLength) {

                xhr = new XMLHttpRequest();
                xhr.open('GET', '{{ (path('app_testajax')) }}', true);
                xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
 
                xhr.onprogress = function(e) {
                                       console.log(e);

                    var response = e.currentTarget.response;
                    var output = lastResponseLength === false
                        ? response
                        : response.substring(lastResponseLength);
 
                    lastResponseLength = response.length;

                     console.log(output);

                };
 
                xhr.onreadystatechange = function() {
                    if (xhr.readyState == 4) {
                      console.log("Completed");
                        //$('#stream-output').append('<p>Completed!</p>');
                    }
                };
 
                xhr.send();

            }

, который дает консольный вывод как

Line1 Line2 Line3 Завершено

Но вместо этого мне нужно вернуть json. например,

new JsonResponse (['message' => $ i, 'status' => 'success']);

Возможно ли это. Надеюсь, кто-нибудь может помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...