Я получаю записи из базы данных и создаю массив для каждой строки и кодирую его с помощью json_encode().
Теперь мои данные возвращаются следующим образом: [{"slug":"bitcoin","change7d":"-3.87"}][{"slug":"maker","change7d":"-8.58"}].
Когда я пытаюсь проанализировать данные при вызове ajax, console.info() возвращает ошибку SyntaxError: Unexpected token [ in JSON at position 39. Вот мой код:
в моем файле php:
foreach($result as $row){
$data[] = $row;
}
print json_encode($data);
в моем js-файле:
var newData = JSON.parse(result);
Если я немного изменю свой запрос и получу одну запись, то у меня не возникнет проблем с анализом данных.



JSON.parse анализирует один допустимый объект JS (структуру { } или массив). Итак, решение в вашем случае либо извлекает массив за массивом из базы данных и анализирует их один за другим, либо пытается преобразовать их в один большой массив массивов на текстовом уровне, который вы получаете из базы данных. Для этого вам нужно заключить массивы в квадратные скобки и поставить между ними запятые.
В вашем случае это будет выглядеть так:
[
[{"slug":"bitcoin","change7d":"-3.87"}],
[{"slug":"maker","change7d":"-8.58"}]
]
JSON, который вы анализируете, недействителен. Вы должны вернуть один массив объектов для правильного анализа данных вместо двух массивов. Е.НБСП666г.:
[{"slug":"bitcoin","change7d":"-3.87"},{"slug":"maker","change7d":"-8.58"}]
Вы должны создать один массив, содержащий записи, попробуйте просто
print json_encode($result)
в вашем файле PHP
После долгих исследований мне удалось решить проблему, просто сделав это:
var old = JSON.stringify(result).replace(/\]\[/g, ",");
var newData = JSON.parse(old);
console.info(newData);
Он заменяет все вхождения '][' на '', следовательно, данные ответа преобразуются в допустимый JSON.
и это дает ожидаемый результат.