У меня есть функция потокового ответа в моем контроллере, как показано ниже
/**
* @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']);
Возможно ли это. Надеюсь, кто-нибудь может помочь