web-dev-qa-db-fra.com

Boucle jQuery sur des données Json utilisant $ .each

J'ai le code JSON suivant renvoyé dans une variable appelée data.

CE IS 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 pour lesquels l'alerte indique non définie. J'ai essayé beaucoup de syntaxes différentes, mais je n'arrive pas à comprendre.

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 rappeler

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

EDIT 2 Cela me laisse un peu déroutant. Selon la documentation, cela devrait fonctionner comme je l'ai, mais ça ne fonctionne pas. Selon le violoneur, l'en-tête indique: -

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

et le JSON est exactement correct ci-dessus. J'utilise chrome si cela change tout. Va tester dans IE et FF ....

EDIT

en utilisant $ .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]"
152
Rippo
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);
});

ces deux options fonctionnent bien, sauf si vous avez quelque chose comme:

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:

essayez avec cela et décrit ce que le résultat

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

FOR 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'.

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

Avez-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 ne fonctionnera plus tard que dans FF 3.5 ou si vous incluez json2.js

jQuery depuis la version 1.4.1 ont également une fonction pour cela, $.parseJSON() .

Mais en réalité, $.getJSON() devrait vous donner un objet json déjà analysé. Vous devez donc tout vérifier à fond. Il y a une petite erreur cachée quelque part, comme si vous aviez peut-être oublié de citer quelque chose en json, ou l’un des crochets manque.

16
vava

getJSON évalue les données au format JSON pour vous, tant que le type de contenu correct est utilisé. Assurez-vous que le serveur renvoie les données en tant qu'application/json.

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