jquery-lus op Json-gegevens met $.each

Ik heb de volgende JSON geretourneerd in een variabele met de naam data.

DIT IS DE JSON DIE WORDT GERETOURNEERD…

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

en ik probeer door de verzameling te bladeren met $.each, maar ik loop tegen problemen aan waarbij de waarschuwing ongedefinieerd wordt weergegeven. Ik heb veel verschillende syntaxis geprobeerd, maar ik kom er niet uit.

De JQuery die ik gebruik is

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

Kan iemand me in de goede richting wijzen?

BEWERKEN
Dit is de code die ik gebruik om de gegevens te pakken

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

en dit is de functie die wordt aangeroepen bij terugbellen

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

BEWERK 2
Dit brengt me enigszins in de war, volgens de documenten zou het moeten werken zoals ik het heb, maar dat doet het niet. Volgens fiddler toont de kop:-

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

en de JSON hierboven is precies correct. Ik gebruik chrome als dit iets anders maakt. Zal testen in IE en FF….

BEWERK 3

het gebruik van $.get produceert

"[\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]"

Antwoord 1, autoriteit 100%

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);
});

deze twee opties werken goed, tenzij je zoiets hebt als:

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);
});

BEWERKEN:

probeer dit en beschrijft wat het resultaat is

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

VOOR BEWERKING 3:

dit lost het probleem op, maar niet het idee om “eval” te gebruiken, je zou moeten kijken hoe het antwoord is in ‘/Cms/GetPages/123’.

$.get('/Cms/GetPages/123', function(data) {
  $.each(eval(data.replace(/[\r\n]/, "")), function(i, item) {
   alert(item.PageName);
  });
});

Antwoord 2, autoriteit 5%

Heb je je gegevens geconverteerd van string naar JavaScript-object?

Je kunt het doen met data = eval('(' + string_data + ')');of, wat veiliger is, data = JSON.parse(string_data);maar werkt later alleen in FF 3.5 of als u json2.js

opneemt

jQuery sinds 1.4.1 heeft daar ook een functie voor, $.parseJSON().

Maar eigenlijk zou $.getJSON()je een al geparseerd json-object moeten geven, dus je moet alles gewoon grondig controleren, er is ergens een klein foutje begraven, alsof je misschien bent vergeten iets te citeren in json, of een van de haakjes ontbreekt.


Antwoord 3, autoriteit 2%

$.each(JSON.parse(result), function(i, item) {
    alert(item.number);
});

Antwoord 4, autoriteit 2%

getJSON evalueert de gegevens naar JSON voor u, zolang het juiste inhoudstype wordt gebruikt. Zorg ervoor dat de server de gegevens retourneert als applicatie/json.

Other episodes