Jeg har følgende JSON returnert i en variabel kalt data.
DETTE ER JSON'EN SOM BLIR RETURNERT...
[
{"Id": 10004, "PageName": "club"},
{"Id": 10040, "PageName": "qaz"},
{"Id": 10059, "PageName": "jjjjjjj"}
]
og jeg prøver å løpe gjennom samlingen ved hjelp av $.each, men jeg får problemer der varselet viser udefinert. Jeg har prøvd mange forskjellige syntakser, men ser ikke ut til å finne ut av dette.
JQuery jeg bruker er
$.each(data, function(i, item) {
alert(item.PageName);
});
Kan noen peke meg i riktig retning?
EDIT Dette er koden jeg bruker for å hente dataene
$.getJSON('/Cms/GetPages/123', null, function(data) {
fillSelect(data);
});
og dette er funksjonen som blir kalt ved tilbakeringing.
function fillSelect(data) {
alert(data);
$.each(data, function(i, item) {
alert(item.PageName);
});
}
EDIT 2 Dette forvirrer meg litt, ifølge dokumentene skal det fungere slik jeg har det, men det gjør det ikke. I følge fiddler viser overskriften::.
Content-Type: application/json; charset=utf-8
og JSON er nøyaktig riktig ovenfor. Jeg bruker chrome hvis dette gjør noe annerledes. Vil teste i IE og FF....
EDIT 3
bruker $.get produserer
"[\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);
});
disse to alternativene fungerer bra, med mindre du har noe som:
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:
prøver med dette og beskriver hva resultatet
$.get('/Cms/GetPages/123', function(data) {
alert(data);
});
FOR REDIGERING 3:
Dette retter problemet, men ikke ideen om å bruke "eval", du bør se hvordan er svaret i '/Cms/GetPages/123'.
$.get('/Cms/GetPages/123', function(data) {
$.each(eval(data.replace(/[\r\n]/, "")), function(i, item) {
alert(item.PageName);
});
});
Har du konvertert dataene dine fra streng til JavaScript-objekt?
Du kan gjøre det med data = eval('(' + string_data + ')');
eller, som er sikrere, data = JSON.parse(string_data);
men senere vil bare fungere i FF 3.5 eller hvis du inkluderer json2.js
jQuery siden 1.4.1 har også funksjon for det, $.parseJSON()
.
Men faktisk, $.getJSON()
skal gi deg allerede analysert json-objekt, så du bør bare sjekke alt grundig, det er liten feil begravet et sted, som om du kanskje har glemt å sitere noe i json, eller en av parentesene mangler.