Итеративные данные JSON и доступ к данным с помощью JQuery - PullRequest
0 голосов
/ 01 августа 2011

У меня есть следующие данные JSON, возвращаемые веб-сервисом:

    {"d":[
{"RelationshipManager":{},"AdvisoryId":13,"ClientId":22,"UserId":13,"AdvisoryMessage":"Welcome!","Seen":false,"Issued":"\/Date(1312123970110)\/","Delivered":null,"Importance":3},
{"RelationshipManager":{},"AdvisoryId":14,"ClientId":22,"UserId":13,"AdvisoryMessage":"A really long boring message.","Seen":false,"Issued":"\/Date(1312123970113)\/","Delivered":null,"Importance":1},
{"RelationshipManager":{},"AdvisoryId":15,"ClientId":22,"UserId":13,"AdvisoryMessage":"Another really long boring message.","Seen":false,"Issued":"\/Date(1312123970113)\/","Delivered":null,"Importance":1},
]}

Я пытаюсь получить доступ к каждому элементу с помощью Jquery и вставить это в уведомление jGrowl. Я не могу пройти начальный этап alert вывода данных:

$.ajax({
                type: "POST",
                url: "http://xxx/Service/Assets.asmx/GetUnreadAdvisories",
                data: "{'sessionHash':'<%=Session["SessionHash"].ToString()%>'}",
                contentType: "application/json",
                dataType: "json",
                success: function (msg) {
                    if (msg["d"].length > 0) {
                        var data = $.parseJSON(msg.d);

                        $.each(msg, function() {
                            alert(msg.AdvisoryMessage);                                
                            $.jGrowl(msg.AdvisoryMessage, { sticky: true, theme: 'info' });

                        })

                    } else {
                        alert('no fish');
                        return false;
                    }
                },
                error: function (msg) {
                    alert(msg);
                }
            });

Я знаю, что этот вопрос довольно нуб, но помощь поздней ночи приветствуется :) 1008 *

Ответы [ 3 ]

3 голосов
/ 01 августа 2011

Ваш код немного запутан. 1) вам не нужно использовать parseJSON - jquery дает вам объект (msg), а не строку json 2) вы проверяете длину массива msg ['d'], но затем пытаетесь выполнить итерацию по msg, который является объектом с единственным свойством (d)

Кроме того, вам не нужны (по общему признанию, небольшие) издержки jquery для вашего цикла

var i = 0, size = msg['d'].length;
while (i < size) {
  alert(msg['d'][i]['AdvisoryMessage']);
  i++;
}
0 голосов
/ 01 августа 2011

Я думаю, что вы пытаетесь перебрать данные, так как вы анализируете msg.d и присваиваете его переменной данных. Попробуйте это

var data = $.parseJSON(msg.d);

                        $.each(data, function() {
                            alert(msg.AdvisoryMessage);                                
                            $.jGrowl(msg.AdvisoryMessage, { sticky: true, theme: 'info' });

                        });
0 голосов
/ 01 августа 2011
contentType: "application/json",

Это неправильно. Это тип контента, когда вы отправляете не то, что получаете. И я очень сомневаюсь, что вы посылаете JSON.

И, как кто-то еще упомянул, вам не нужно $.parseJSON(msg.d) - выполнение dataType: 'json' уже вызывает его анализ.

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