Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.04.2018, 18:09
Интересующийся
Отправить личное сообщение для ishurgaya Посмотреть профиль Найти все сообщения от ishurgaya
 
Регистрация: 12.08.2015
Сообщений: 29

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

Имею в 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

Помогите разобраться что делать то?
Ответить с цитированием
  #2 (permalink)  
Старый 27.04.2018, 18:25
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от ishurgaya
Если в js пытаться делать JSON.parse(people), то выходит ошибка:
"SyntaxError: Unexpected token o in JSON at position 1" .
Потому что вы уже получили объект.
Сообщение от ishurgaya
ни так people["petrov"]["ot"] ни так people.petrov.ot
Посмотрите, что в ответе при помощи JSON.stringify(people)


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

Последний раз редактировалось Dilettante_Pro, 27.04.2018 в 18:29.
Ответить с цитированием
  #3 (permalink)  
Старый 27.04.2018, 20:35
Интересующийся
Отправить личное сообщение для ishurgaya Посмотреть профиль Найти все сообщения от ishurgaya
 
Регистрация: 12.08.2015
Сообщений: 29

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 , он подключается в подвале и это отдельный файл,значение туда приходят.

Последний раз редактировалось ishurgaya, 27.04.2018 в 21:03.
Ответить с цитированием
  #4 (permalink)  
Старый 28.04.2018, 09:55
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

ishurgaya,
А если возвратить просто строку? Без json_encode ?
Ответить с цитированием
  #5 (permalink)  
Старый 28.04.2018, 10:10
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Сообщение от Dilettante_Pro
А если возвратить просто строку? Без json_encode ?
Плохая идея, будет warning + var people='Array';

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

Последний раз редактировалось Nexus, 28.04.2018 в 10:17.
Ответить с цитированием
  #6 (permalink)  
Старый 28.04.2018, 10:31
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Nexus,
Что-то я вас не понял.
Сообщение от Nexus
если возвратить просто строку?
Сообщение от Nexus
Плохая идея,
Сообщение от Nexus
Если в скрипт передаете строку
Ответить с цитированием
  #7 (permalink)  
Старый 28.04.2018, 11:03
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

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

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

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

Чтобы все заработало нужно либо избавиться от апострофов, либо в js парсить json из переменной people.
Ответить с цитированием
  #8 (permalink)  
Старый 28.04.2018, 11:28
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Nexus,
насчет json_encode вы, конечно, совершенно правы
Сообщение от Nexus
либо избавиться от апострофов
Насчет апострофов я проглядел... Совсем не обратил внимания
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При отправке формы Аяксом возникает ошибка Veterinar jQuery 0 19.01.2014 14:39
Ошибка 'stack out of space' при обработке onpropertychange в ie<9 svicserg Events/DOM/Window 9 21.03.2013 18:10
из массива json в (php) переменные Sadist_dead AJAX и COMET 6 24.08.2011 22:58
Что выбрать XML или JSON для передачи Ajax - ом из PHP в JS Gozar Общие вопросы Javascript 20 16.08.2009 23:36
Снятие затемнения с экрана при получении ответа от php срипта с помощью setInterval roma86 jQuery 0 16.08.2009 12:39