Eu tenho o seguinte JSON retornado em uma variável chamada data.
ESTE É O JSON QUE É DEVOLVIDO ...
[
{"Id": 10004, "PageName": "club"},
{"Id": 10040, "PageName": "qaz"},
{"Id": 10059, "PageName": "jjjjjjj"}
]
e estou tentando fazer um loop pela coleção usando $ .each, mas estou com problemas nos quais o alerta está sendo mostrado indefinido. Eu tentei muitas sintaxes diferentes, mas não consigo entender isso.
O JQuery que estou usando é
$.each(data, function(i, item) {
alert(item.PageName);
});
Alguém pode me apontar na direção certa?
EDIT Este é o código que estou usando para capturar os dados
$.getJSON('/Cms/GetPages/123', null, function(data) {
fillSelect(data);
});
e esta é a função que é chamada ao retornar a chamada
function fillSelect(data) {
alert(data);
$.each(data, function(i, item) {
alert(item.PageName);
});
}
EDIT 2 Isso está me confundindo um pouco, de acordo com os documentos que devem funcionar como eu tenho, mas não. De acordo com o violinista, o cabeçalho mostra: -
Content-Type: application/json; charset=utf-8
e o JSON está exatamente correto acima. Estou usando o chrome se isso faz alguma diferença. Irá testar no IE e FF ....
EDIT 3
usando $ .get produz
"[\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]"
Respostas:
essas duas opções funcionam bem, a menos que você tenha algo como:
EDITAR:
tente com isso e descreve qual é o resultado
PARA A EDIÇÃO 3:
isso corrige o problema, mas não a idéia de usar "eval", você deve ver como está a resposta em '/ Cms / GetPages / 123'.
fonte
eval(data)
$.get
produzVocê 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 posteriormente só funcionará no FF 3.5 ou se você incluir o json2.jsO jQuery desde a versão 1.4.1 também tem função para isso
$.parseJSON()
,.Mas, na verdade,
$.getJSON()
você deve fornecer o objeto json já analisado; portanto, verifique tudo minuciosamente, pois há pouco erro oculto em algum lugar, como se você tivesse esquecido de citar algo em json ou se faltar um dos colchetes.fonte
fillselect(eval(data));
eval
?data = eval('('+string_data+')');
. Além disso, o jQuery tem outra funçãodata = jQuery.parseJSON(string_data);
eval(data)
funciona. Por favor, veja o meu EDIT 2O getJSON avaliará os dados para JSON para você, desde que o tipo de conteúdo correto seja usado. Verifique se o servidor está retornando os dados como application / json.
fonte
Content-Type: application/json; charset=utf-8
fonte