J'ai le JSON suivant retourné dans une variable appelée data.
CECI EST LE JSON QUI EST RETOURNÉ ...
[
{"Id": 10004, "PageName": "club"},
{"Id": 10040, "PageName": "qaz"},
{"Id": 10059, "PageName": "jjjjjjj"}
]
et j'essaye de parcourir la collection en utilisant $ .each mais je rencontre des problèmes où l'alerte est indéfinie. J'ai essayé beaucoup de syntaxes différentes mais je n'arrive pas à comprendre cela.
Le JQuery que j'utilise est
$.each(data, function(i, item) {
alert(item.PageName);
});
Est-ce que quelqu'un peut-il me montrer la bonne direction?
EDIT C'est le code que j'utilise pour récupérer les données
$.getJSON('/Cms/GetPages/123', null, function(data) {
fillSelect(data);
});
et c'est la fonction qui est appelée lors du rappel
function fillSelect(data) {
alert(data);
$.each(data, function(i, item) {
alert(item.PageName);
});
}
EDIT 2 Cela me déroute un peu, selon la documentation, cela devrait fonctionner comme je l'ai, mais ce n'est pas le cas. Selon Fiddler, l'en-tête montre: -
Content-Type: application/json; charset=utf-8
et le JSON est exactement correct ci-dessus. J'utilise chrome si cela en fait différent. Testera dans IE et FF ....
MODIFIER 3
l'utilisation de $ .get produit
"[\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]"
Réponses:
ces deux options fonctionnent bien, sauf si vous avez quelque chose comme:
ÉDITER:
essayez avec ceci et décrit ce que le résultat
POUR EDIT 3:
cela corrige le problème, mais pas l'idée d'utiliser "eval", vous devriez voir comment sont les réponses dans '/ Cms / GetPages / 123'.
la source
eval(data)
$.get
produitAvez-vous converti vos données de chaîne en objet JavaScript?
Vous pouvez le faire avec
data = eval('(' + string_data + ')');
ou, ce qui est plus sûr,data = JSON.parse(string_data);
mais plus tard ne fonctionnera que dans FF 3.5 ou si vous incluez json2.jsjQuery depuis 1.4.1 ont également la fonction pour cela,
$.parseJSON()
.Mais en fait, cela
$.getJSON()
devrait vous donner un objet json déjà analysé, donc vous devriez juste tout vérifier minutieusement, il y a une petite erreur enterrée quelque part, comme si vous avez oublié de citer quelque chose dans json, ou l'un des crochets est manquant.la source
fillselect(eval(data));
eval
?data = eval('('+string_data+')');
. En outre, jQuery a une autre fonctiondata = jQuery.parseJSON(string_data);
eval(data)
fonctionne seulement . S'il vous plaît voir mon EDIT 2getJSON évaluera les données en JSON pour vous, à condition que le type de contenu correct soit utilisé. Assurez-vous que le serveur renvoie les données sous forme d'application / json.
la source
Content-Type: application/json; charset=utf-8
la source