@Igorek1999

Как правильно отправлять джейсон с сервера при большом количестве данных?

Подскажите, когда я получаю от БД всего одно совпадение, то у меня отправляется один джейсон на клиент и его нормально обрабатываю, но когда совпадений 2 и более, получается мне отправляет 2 и более джейсонов сторокй и JSON.parse выдает ошибку.

Как мне правильно обрабатывать поток джейсонов на клиенте(когда их много в одну строку) или как правильно отправлять с сервера на клиент такой формат, чтобы отправлялось по одному дежйсону, а не все строкой?

while($row = $result->fetch_assoc()) {
     echo json_encode($row, JSON_UNESCAPED_UNICODE);
}
  • Вопрос задан
  • 181 просмотр
Решения вопроса 4
inoise
@inoise Куратор тега PHP
Solution Architect, AWS Certified, Serverless
Добавлять все в единый массив, а потом его превращать в json
Ответ написан
Комментировать
DevMan
@DevMan
не выводить по одной записи, а выбрать все и отправить один джейсон.
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Отдельно готовьте данные, отдельно их отправляйте. Тогда не будет возникать такой проблемы.
$result = ['data' => []];
while($row = $result->fetch_assoc()) {
     $result['data'][] = $row;
}
$result['state' => 'ok'];
...
echo json_encode($result, JSON_UNESCAPED_UNICODE);
Ответ написан
Комментировать
zkrvndm
@zkrvndm
Архитектор решений
Описанный вами подход неправильный, но если вы не хотите полностью переписывать серверную часть, можно обойтись небольшими изменениями, а именно добавьте между JSON какой-нибудь разделитесь:
while($row = $result->fetch_assoc()) {
     echo json_encode($row, JSON_UNESCAPED_UNICODE) . '{разделитель}';
}

В браузере уже на JavaSсript можно будет разбить ответ на части по разделителю:
response = 'здесь_ваши_полученные_JSON';
array = response.split('{разделитель}');
console.dir(array);

А далее обработать все полученные JSON по одному.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы