$ .getJSON не анализирует объект в обратном вызове - PullRequest
2 голосов
/ 02 июля 2010

У меня есть простой запрос getJson:

$.getJSON('JsonTest', function(o) {
alert(o.Test);
});

Это работает, но в Firebug "o" никогда не превращается в объект, а остается строкой:

{"Test":"Hello"}

Если я сделаю

eval('(' + o + ')')

Это оценивается нормально, единственное, о чем я могу думать, это то, что есть какая-то проблема межсайтового скриптинга, но я запускаю все на своей машине для разработки, JsonTest отключен от localhost: порт / контроллер / JsonTest

Есть идеи, что может быть не так? Как я могу проверить, является ли это межсайтовой проблемой? Есть еще идеи?

1 Ответ

2 голосов
/ 02 июля 2010

Возможно ли, что ваш сервис JsonTest является "двойным экранированием" от json, который отправляется обратно? Как в:

"{\"Test\":\"Hello\"}"

Поскольку у вас есть firebug, вы можете взглянуть на ответ и вставить необработанный текст, который он показывает?

Если ваш сервисный метод возвращает строку, и вы выполняете свою собственную сериализацию, то это определенно так. Я столкнулся с этим недавно. В любом случае, с «двойными кавычками» (или двойными обертками, двойными экранированными, как вы хотите это называть) возвращается json, $ .getJSON () только eval () делает это один раз, превращая "{\"Test\":\"Hello\"}" в {"Test":"Hello"}, который действительно все еще требует дополнительного eval ().

Кроме того, не используйте eval (). Используйте JSON.parse(). Вы можете включить json2.js из http://json.org/,, и JSON.parse () будет либо использовать собственные возможности разбора json в браузере, либо использовать json2.js, если браузер не делает этого изначально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...