Ich habe den folgenden JSON in einer Variablen namens data zurückgegeben.
DAS IST DER JSON, DER ZURÜCKGEGEBEN WIRD ...
[
{"Id": 10004, "PageName": "club"},
{"Id": 10040, "PageName": "qaz"},
{"Id": 10059, "PageName": "jjjjjjj"}
]
und ich versuche, die Sammlung mit $ .each zu durchlaufen, aber ich stoße auf Probleme, bei denen die Warnung undefiniert angezeigt wird. Ich habe viele verschiedene Syntaxen ausprobiert, kann dies aber nicht herausfinden.
Die JQuery, die ich verwende, ist
$.each(data, function(i, item) {
alert(item.PageName);
});
Kann mich jemand in die richtige Richtung weisen?
BEARBEITEN Dies ist der Code, mit dem ich die Daten abrufe
$.getJSON('/Cms/GetPages/123', null, function(data) {
fillSelect(data);
});
und dies ist die Funktion, die beim Rückruf aufgerufen wird
function fillSelect(data) {
alert(data);
$.each(data, function(i, item) {
alert(item.PageName);
});
}
EDIT 2 Das ist etwas verwirrend für mich, laut den Dokumenten sollte es so funktionieren, wie ich es habe, aber es funktioniert nicht. Laut Fiddler zeigt der Header: -
Content-Type: application/json; charset=utf-8
und der JSON ist oben genau richtig. Ich benutze Chrom, wenn dies etwas anderes macht. Wird in IE und FF testen ....
BEARBEITEN 3
mit $ .get erzeugt
"[\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]"
Antworten:
Diese beiden Optionen funktionieren gut, es sei denn, Sie haben etwas wie:
BEARBEITEN:
Versuchen Sie es damit und beschreiben Sie, was das Ergebnis ist
FÜR EDIT 3:
Dies behebt das Problem, aber nicht die Idee, "eval" zu verwenden. Sie sollten sehen, wie die Antwort in '/ Cms / GetPages / 123' ist.
quelle
eval(data)
$.get
produziertHaben Sie Ihre Daten von einem String in ein JavaScript-Objekt konvertiert?
Sie können dies mit
data = eval('(' + string_data + ')');
oder tun , was sicherer ist,data = JSON.parse(string_data);
aber später nur in FF 3.5 oder mit json2.js funktioniertjQuery seit 1.4.1 hat auch eine Funktion dafür ,
$.parseJSON()
.Aber eigentlich
$.getJSON()
sollten Sie bereits analysierte JSON-Objekte erhalten, also sollten Sie einfach alles gründlich überprüfen, es ist irgendwo ein kleiner Fehler begraben, als hätten Sie vielleicht vergessen, etwas in JSON zu zitieren, oder eine der Klammern fehlt.quelle
fillselect(eval(data));
eval
?data = eval('('+string_data+')');
. Außerdem hat jQuery eine andere Funktiondata = jQuery.parseJSON(string_data);
eval(data)
funktioniert nur . Bitte sehen Sie meine EDIT 2getJSON wertet die Daten für Sie in JSON aus, solange der richtige Inhaltstyp verwendet wird. Stellen Sie sicher, dass der Server die Daten als application / json zurückgibt.
quelle
Content-Type: application/json; charset=utf-8
quelle