Į kintamąjį, pavadintą data, grąžinamas toks JSON.
TAI YRA GRĄŽINAMAS JSON...
[
{"Id": 10004, "PageName": "club"},
{"Id": 10040, "PageName": "qaz"},
{"Id": 10059, "PageName": "jjjjjjj"}
]
ir bandau pervesti ciklą per kolekciją naudodamas $.each, bet susiduriu su problemomis, kai perspėjimas rodo neapibrėžtą. Išbandžiau daug skirtingų sintaksių, bet negaliu to išsiaiškinti.
Mano naudojama JQuery yra
$.each(data, function(i, item) {
alert(item.PageName);
});
Ar kas nors gali mane nukreipti tinkama linkme?
EDIT Tai yra kodas, kurį naudoju duomenims paimti
$.getJSON('/Cms/GetPages/123', null, function(data) {
fillSelect(data);
});
ir tai yra funkcija, kuri iškviečiama po skambučio atgal
function fillSelect(data) {
alert(data);
$.each(data, function(i, item) {
alert(item.PageName);
});
}
EDIT 2 Tai mane šiek tiek klaidina, pagal dokumentus tai turėtų veikti taip, kaip turiu, bet taip nėra. Pagal fiddlerį antraštė rodo:-
Content-Type: application/json; charset=utf-8
o JSON yra visiškai teisingas aukščiau. Aš naudoju chrome, jei tai daro kokį nors skirtumą. Išbandysiu IE ir FF....
EDIT 3
naudojant $.get gamina
"[\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);
});
šie du variantai veikia gerai, nebent turite kažką panašaus į:
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:
pabandykite su šiuo ir aprašo, ką rezultatas
$.get('/Cms/GetPages/123', function(data) {
alert(data);
});
REDAGUOTI 3:
tai ištaiso problemą, bet ne idėja naudoti "eval", turėtumėte pamatyti, kaip yra atsakymas į '/Cms/GetPages/123'.
$.get('/Cms/GetPages/123', function(data) {
$.each(eval(data.replace(/[\r\n]/, "")), function(i, item) {
alert(item.PageName);
});
});
Ar konvertavote duomenis iš eilutės į "JavaScript" objektą?
Tai galite padaryti naudodami data = eval('('(' + string_data + ')');
arba, kas yra saugiau, data = JSON.parse(string_data);
, bet vėliau tai veiks tik FF 3.5 arba jei įtrauksite json2.js
Nuo 1.4.1 versijos jQuery taip pat turi tam skirtą funkciją $.parseJSON()
.
Tačiau iš tikrųjų $.getJSON()
turėtų pateikti jau parsiduotą json objektą, todėl turėtumėte viską kruopščiai patikrinti, ar kur nors nėra paslėpta nedidelė klaida, pavyzdžiui, galbūt pamiršote ką nors pacituoti json arba trūksta vieno iš skliaustų.