Tengo el siguiente JSON devuelto en una variable llamada datos.
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 $ .each pero me encuentro con problemas en los que la alerta se muestra indefinida. He probado muchas sintaxis diferentes, pero parece que no puedo entender esto.
El JQuery que estoy usando es
$.each(data, function(i, item) {
alert(item.PageName);
});
¿Alguien puede señalarme en la dirección correcta?
EDITAR Este es el código que estoy usando para tomar los datos
$.getJSON('/Cms/GetPages/123', null, function(data) {
fillSelect(data);
});
y esta es la función que se llama al devolver la llamada
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. Según el violinista, el encabezado muestra: -
Content-Type: application/json; charset=utf-8
y el JSON es exactamente correcto arriba. Estoy usando Chrome si esto hace algo diferente. Se 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]"
Respuestas:
Estas dos opciones funcionan bien, a menos que tenga algo como:
EDITAR:
prueba con esto y describe cuál es el resultado
PARA EDITAR 3:
esto corrige el problema, pero no la idea de usar "eval", debería ver cómo está la respuesta en '/ Cms / GetPages / 123'.
fuente
eval(data)
$.get
produce¿Has convertido tus datos de cadena a objeto de 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.jsjQuery 1.4.1 ya que también tiene la función de que,
$.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 alguna parte, como puede haber olvidado citar algo en json, o falta uno de los corchetes.fuente
fillselect(eval(data));
eval
?data = eval('('+string_data+')');
. Además, jQuery tiene otra funcióndata = jQuery.parseJSON(string_data);
eval(data)
funciona. Por favor vea mi EDIT 2getJSON evaluará los datos a JSON por usted, siempre que se use el tipo de contenido correcto. Asegúrese de que el servidor esté devolviendo los datos como application / json.
fuente
Content-Type: application/json; charset=utf-8
fuente