Eu tenho o seguinte JSON retornado em uma variável chamada dados.
**ESTE É O AFILHADO QUE É DEVOLVIDO...
[
{"Id": 10004, "PageName": "club"},
{"Id": 10040, "PageName": "qaz"},
{"Id": 10059, "PageName": "jjjjjjj"}
]
e estou a tentar percorrer a colecção usando $.cada, mas estou a deparar-me com problemas onde o alerta está a mostrar indefinido. Eu tentei uma grande quantidade de sintaxe diferente, mas parece que não consigo't descobrir isso.
O JQuery que estou usando é
$.each(data, function(i, item) {
alert(item.PageName);
});
Alguém me pode apontar na direcção certa?
**EDIT*** Este é o código que estou usando para pegar os dados
$.getJSON('/Cms/GetPages/123', null, function(data) {
fillSelect(data);
});
e esta é a função que é chamada na chamada de volta.
function fillSelect(data) {
alert(data);
$.each(data, function(i, item) {
alert(item.PageName);
});
}
**EDIT 2*** Isto está me confundindo um pouco, de acordo com os documentos deveria funcionar como eu tenho, mas não funciona't. De acordo com o fiddler o cabeçalho mostra:-
Content-Type: application/json; charset=utf-8
e o JSON está exactamente correcto acima. Eu estou usando cromo se isso fizer alguma diferença. Testará no IE e FF....
**EDIT 3***
usando $.get produces
"[\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]"
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 duas opções funcionam bem, a menos que você tenha algo parecido:
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);
});
EDIT:
tente com isto e descreva qual é o resultado
$.get('/Cms/GetPages/123', function(data) {
alert(data);
});
PARA EDITAR 3:
isto corrige o problema, mas não a idéia de usar "eval", você deve ver como é a resposta em '/Cms/GetPages/123'.
$.get('/Cms/GetPages/123', function(data) {
$.each(eval(data.replace(/[\r\n]/, "")), function(i, item) {
alert(item.PageName);
});
});
Você já converteu seus dados de string para objeto JavaScript?
Você pode fazê-lo com data = eval('(' + string_data + ')');
ou, o que é mais seguro, data = JSON.parse(string_data);
mas mais tarde só funcionará em FF 3.5 ou se você incluir json2.js
jQuery desde 1.4.1 também tem função para isso, $.parseJSON()
.
Mas na verdade, $.getJSON()
deve dar-lhe um objeto json já analisado, então você deve apenas verificar tudo completamente, há um pequeno erro enterrado em algum lugar, como se você tivesse esquecido de citar algo no json, ou um dos parênteses está faltando.