jquery loop en datos Json usando $.cada


Tengo el siguiente JSON devuelto en una variable llamada data.

ESTE ES EL JSON QUE SE DEVUELVE...

[ 
{"Id": 10004, "PageName": "club"}, 
{"Id": 10040, "PageName": "qaz"}, 
{"Id": 10059, "PageName": "jjjjjjj"}
]

Y estoy tratando de recorrer la colección usando $.cada uno pero me estoy topando con problemas donde la alerta se muestra indefinida. He intentado una gran cantidad de sintaxis diferente, pero parece que no puedo resolver esto.

El jQuery que estoy usando es

$.each(data, function(i, item) {
    alert(item.PageName);
});

¿Puede alguien señalarme en la dirección correcta?

EDITAR Este es el código I estoy usando para agarrar los datos

$.getJSON('/Cms/GetPages/123', null, function(data) {
  fillSelect(data);
});

Y esta es la función que se llama a call back

function fillSelect(data) {
  alert(data);
  $.each(data, function(i, item) {
    alert(item.PageName);
  });
}

EDITAR 2 Esto me confunde un poco, de acuerdo con los documentos debería funcionar como lo tengo, pero no lo hace. De acuerdo con fiddler, el encabezado muestra: -

Content-Type: application/json; charset=utf-8

Y el JSON es exactamente correcto arriba. Estoy usando Chrome si esto hace que sea diferente. Probará en IE y FF....

EDITAR 3

Usando $.get produce

"[\r\n {\r\n \"Id\": 10041,\r\n \"PageName\": \"01234567890\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 2\r\n },\r\n {\r\n \"Id\": 10001,\r\n \"PageName\": \"about\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 1\r\n },\r\n {\r\n \"Id\": 10056,\r\n \"PageName\": \"fdgdfgdfg\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 1\r\n },\r\n {\r\n \"Id\": 10052,\r\n \"PageName\": \"hjkhjk\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 2\r\n },\r\n {\r\n \"Id\": 10059,\r\n \"PageName\": \"jjjjjjj\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 1\r\n },\r\n {\r\n \"Id\": 10057,\r\n \"PageName\": \"qqqqq\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 2\r\n },\r\n {\r\n \"Id\": 10054,\r\n \"PageName\": \"qwqw\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 2\r\n }\r\n]"
Author: Cœur, 2010-02-26

3 answers

var data = [ 
 {"Id": 10004, "PageName": "club"}, 
 {"Id": 10040, "PageName": "qaz"}, 
 {"Id": 10059, "PageName": "jjjjjjj"}
];

$.each(data, function(i, item) {
    alert(data[i].PageName);
});​

$.each(data, function(i, item) {
    alert(item.PageName);
});​

Estas dos opciones funcionan bien, a menos que tengas algo como:

var data.result = [ 
 {"Id": 10004, "PageName": "club"}, 
 {"Id": 10040, "PageName": "qaz"}, 
 {"Id": 10059, "PageName": "jjjjjjj"}
];

$.each(data.result, function(i, item) {
    alert(data.result[i].PageName);
});​

EDITAR:

Intente con esto y describe cuál es el resultado

$.get('/Cms/GetPages/123', function(data) {
  alert(data);
});

PARA EDITAR 3:

Esto corrige el problema, pero no la idea de usar "eval", debería ver cómo son las respuestas en '/Cms/GetPages/123'.

$.get('/Cms/GetPages/123', function(data) {
  $.each(eval(data.replace(/[\r\n]/, "")), function(i, item) {
   alert(item.PageName);
  });​
});
 275
Author: andres descalzo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-26 16:32:21

¿Ha convertido sus datos de string a objeto JavaScript?

Puede hacerlo con data = eval('(' + string_data + ')'); o, que es más seguro, data = JSON.parse(string_data); pero más tarde solo funcionará en FF 3.5 o si incluye json2.js

JQuery desde 1.4.1 también tienen función para eso, $.parseJSON().

Pero en realidad, $.getJSON() debería darle un objeto json ya analizado, por lo que debe verificar todo a fondo, hay un pequeño error enterrado en algún lugar, como si hubiera olvidado citar algo en json, o falta uno de los corchetes.

 16
Author: vava,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-26 15:40:49

GetJSON evaluará los datos en JSON por usted, siempre y cuando se utilice el tipo de contenido correcto. Asegúrese de que el servidor devuelve los datos como application/json.

 4
Author: kgiannakakis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-26 15:05:07