Как проанализировать JSON, созданный объектом WCF DataContract - PullRequest
0 голосов
/ 18 мая 2011

У меня есть объект, украшенный атрибутом [DataContract], и мой сервис WCF возвращает его в виде JSON, например:

{"GetCommentsByPostResult":[{"CommentCreated":"\/Date(1305736030505+0100)\/","CommentText":"Comment 1"},{"CommentCreated":"\/Date(1305736030505+0100)\/","CommentText":"Comment 2"},{"CommentCreated":"\/Date(1305736030505+0100)\/","CommentText":"Comment 2"}]});

Я попытался перебрать комментарий, созданный с помощью этого кода jQuery:

$(data).each(function () 
{
     alert(this.CommentCreated);
});

Но все, что я получаю, это окно с надписью «undefined in», поэтому я изменил его на:

 $(data).each(function () {

         $(this.GetCommentsByPostResult).each(function () {

                      alert(this.GetCommentsByPostResult);
         });

 });

но это все еще не работает. То, что я хочу сделать, это итерация CommentCreated и выбросить их в окно предупреждения ....

Ответы [ 2 ]

3 голосов
/ 18 мая 2011

Я не уверен, но я не думаю, что this будет текущим элементом при вызове each. Кроме того, почему вы оборачиваете переменную data функцией jQuery? Коллекции jQuery предназначены для элементов DOM.

$.each(data.GetCommentsByPostResult, function (e) {
    alert(e.CommentCreated);
});
0 голосов
/ 18 мая 2011

В зависимости от того, как вы получаете данные (библиотека? Пользовательский код?), Вам, скорее всего, придется сначала преобразовать строку JSON в реальный объект JavaScript.Многие браузеры имеют встроенные методы для этого, хотя вам может понадобиться использовать стороннюю библиотеку, чтобы воспользоваться теми, которые не имеют встроенной поддержки.Я бы порекомендовал JSON-js , так как он использует тот же синтаксис, что и встроенный в некоторые браузеры.

var obj = JSON.parse(data);

Получив этот объект, вы теперь можете обращаться к данным с помощью стандартного JavaScriptточка или скобка:

var comments = obj.GetCommentsByPostResult; // or...
var comments = obj['GetCommentsByPostResult'];

Эти две строки эквивалентны.Чтобы повторить комментарии, как вы пытаетесь сделать, вы можете попробовать:

$.each(obj.GetCommentsByPostResult, function (e) {
    alert(e.CommentCreated);
});

Кроме того, я бы рекомендовал использовать console.log () вместо alert () и браузер, который поддерживает проверкузарегистрированные объекты.Это может быть FireFox с расширением Firebug или Chrome с их инструментами разработчика (Ctrl-Shift-J для активации).Не уверен насчет статуса этого типа инструмента в IE9, хотя я не удивлюсь, если там будет аналогичный инструмент.

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