Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Ошибка при получении json из php (https://javascript.ru/forum/misc/73600-oshibka-pri-poluchenii-json-iz-php.html)

ishurgaya 27.04.2018 18:09

Ошибка при получении json из php
 
Hello World, товарищи!:victory:

Имею в php объект, нужно его передать в js.
Для этого в php его обрабатываю json_encode.

В итоге в js я получаю json в таком виде:
var people = '{
"petrov" : { "ot":1, "do":5 },
"smirnov" : { "ot":1, "do":5 }
}';

Если в js пытаться делать JSON.parse(people), то выходит ошибка:
"SyntaxError: Unexpected token o in JSON at position 1" .
И в консоли показывает, что ругается на [object Object]

Пробовал убирать JSON.parse , но тогда я не могу значения получить ни так people["petrov"]["ot"] ни так people.petrov.ot

Помогите разобраться что делать то?

Dilettante_Pro 27.04.2018 18:25

Цитата:

Сообщение от ishurgaya
Если в js пытаться делать JSON.parse(people), то выходит ошибка:
"SyntaxError: Unexpected token o in JSON at position 1" .

Потому что вы уже получили объект.
Цитата:

Сообщение от ishurgaya
ни так people["petrov"]["ot"] ни так people.petrov.ot

Посмотрите, что в ответе при помощи JSON.stringify(people)


Хорошо было бы, если бы вы показали скрипт, которым получаете ответ

ishurgaya 27.04.2018 20:35

JSON.stringify(people) выдает
"{\"petrov\":{\"ot\":\"4\",\"do\":\"5\"},\"smirnov \":{\"ot\":\"5\",\"do\":\"6\"}}"

JSON.parse(JSON.stringify(people)) выдает
{"petrov":{"ot":"4","do":"5"},"smirnov":{"ot":"5", "do":"6"}}

console.log(people.petrov); уже undefined
При попытке получить значения выдает Uncaught TypeError: Cannot read property 'ot' of undefined


Передаю без ajax запросов.
С объектом работаю в шаблоне на php.
И в шаблоне же задаю.
<script>
var people = '<?=json_encode($people) ?>';
</script>

А js который работает с переменной people , он подключается в подвале и это отдельный файл,значение туда приходят.

Dilettante_Pro 28.04.2018 09:55

ishurgaya,
А если возвратить просто строку? Без json_encode ?

Nexus 28.04.2018 10:10

Цитата:

Сообщение от Dilettante_Pro
А если возвратить просто строку? Без json_encode ?

Плохая идея, будет warning + var people='Array';

ishurgaya, вы объект превращаете в строку, отсюда и ошибка.
<script>
var people=<?=json_encode($people);?>;
</script>
Если в скрипт передаете строку, то декодируйте её (JSON.parse) перед использованием.

Dilettante_Pro 28.04.2018 10:31

Nexus,
Что-то я вас не понял.
Цитата:

Сообщение от Nexus
если возвратить просто строку?

Цитата:

Сообщение от Nexus
Плохая идея,

Цитата:

Сообщение от Nexus
Если в скрипт передаете строку


Nexus 28.04.2018 11:03

Dilettante_Pro, я также не понял, что не поняли вы :)

Если ТС будет пытаться вставлять данные так (без кодирования в json):
var people='<?php =$people;?>';
То в итоге получит это:
var people='Notice: ~description
Array';
*Notice будет выведен, если вывод ошибок включен.

Сейчас он вставляет данные так:
var people='<?php =json_encode($people);?>';
Получает переменную типа string, т.к. json обернут в апострофы.

Чтобы все заработало нужно либо избавиться от апострофов, либо в js парсить json из переменной people.

Dilettante_Pro 28.04.2018 11:28

Nexus,
насчет json_encode вы, конечно, совершенно правы
Цитата:

Сообщение от Nexus
либо избавиться от апострофов

Насчет апострофов я проглядел... Совсем не обратил внимания


Часовой пояс GMT +3, время: 09:50.