2013-07-20 6 views
-1

Je ne parviens pas à analyser JSOn avec la fonction get JSON de jquery. S'il vous plaît aider. Voici le code html:Analyse JSON avec jquery

function getList() 
{ 
$.getJSON("http://localhost/webservice/list.php", function(data){ 
    for (var i=0, len=data.length; i < len; i++) 
    { 
     alert(data[i]); 
    } 

}); 

Et voici le fichier list.php qui est mis à en-tête ('Content-Type: application/JSON')

{ 
"promos":[ 
{"promo":{"id":"1","name":"MADINAT JUMEIRAH AL QASR","image":"","stars":"","highlights":""}}, 
{"promo":{"id":"2","name":"MADINAT JUMEIRAH DAR AL MASYAF","image":"","stars":"","highlights":""}}, 
{"promo":{"id":"3","name":"ATLANTIS THE PALM","image":"","stars":"","highlights":""}}, 
{"promo":{"id":"4","name":"JUMEIRAH ZABEEL SARAY 5*","image":"","stars":"","highlights":""}}, 
{"promo":{"id":"5","name":"HABTOOR GRAND BEACH RESORT & SPA","image":"","stars":"","highlights":""}}, 
{"promo":{"id":"6","name":"HILTON DUBAI JUMEIRAH RESORT","image":"","stars":"","highlights":""}} 
] 
} 

Edit: Quelqu'un a dit que je ne devrait pas boucle sur les données plutôt que des données.promos j'ai essayé mais cela ne aide pas. Je suis nouveau à JSON:

for (var i=0, len=data.promos.length; i < len; i++) 
    { 
     alert(data.promos[i]); 
    } 
+0

Y a-t-il une erreur? – Ryan

+1

Vous traitez les données json sous forme de tableau même si le niveau supérieur est un objet. Vous devriez utiliser data.promos lorsque vous utilisez des données. –

+1

Cette question semble être hors sujet parce que le demandeur ne gère pas correctement la structure de ses données spécifiques, pas quelque chose de plus généralement pertinent, et ne comprend pas les messages d'erreur ou d'autres descriptions de ce qui se passe réellement au lieu du résultat. –

Répondre

-1

Essayez ceci:

$.each(data.promo, function(key, value) { 
     console.log(value.id); 
     //and so on... 
}); 
+0

_foreach_ est tellement plus facile qu'un _for traditionnel (blabla) _ – ffmpe

+0

Ok, maintenant il boucle tout droit, mais affiche undefined lorsque j'essaye d'obtenir une valeur (id par exemple comme vous avez posté) –

+1

Ce n'est même pas juste. – Ryan

4

data est un objet, avec une propriété (promos), pas un tableau. Vous ne pouvez pas boucler dessus. (Vous pouvez faire une boucle sur data.promos).

+1

Merci pour la réponse. Loop fonctionne maintenant mais quand j'essaie d'obtenir la valeur de id comme valeur.id (en utilisant chaque boucle maintenant et chaque promo est une valeur) Je ne suis pas défini pouvez-vous dire quel pourrait être le problème @quentin –

+1

@AhmarAli: Êtes-vous en utilisant 'data [i] .id'? C'est 'data [i] .promo.id'. – Ryan

+0

@minitech J'utilise ce $ .each (données.promos, fonction (clé, valeur) { console.log (valeur.id); }); –

1

Notez que la propriété de haut niveau de vos données de JSON est nommé promos:

<html> 
<head> 
    <script language="javascript" 
      type="text/javascript" 
      src="./jquery-1.10.2.min.js" ></script> 
</head> 
<body> 

<script type="text/javascript"> 

    function getList() { 

     $.getJSON("http://localhost:8888/testbed/jsonProvider.php", function(data){ 

      // Use JavaScript's log facility to learn what's inside a variable 
      console.log(data); 

      var len = data.promos.length; 

      for (var i=0; i < len; i++) { 

       alert(data.promos[i].promo.id); 

      } 

     }); 

    } 

    getList(); 

</script> 

</body> 
</html> 

et ce fournisseur de données PHP jsonProvider.php:

<?php 
header('Content-type: application/json'); 
?> 
{ 
"promos":[ 
{"promo":{"id":"1","name":"MADINAT JUMEIRAH AL QASR","image":"","stars":"","highlights":""}}, 
{"promo":{"id":"2","name":"MADINAT JUMEIRAH DAR AL MASYAF","image":"","stars":"","highlights":""}}, 
{"promo":{"id":"3","name":"ATLANTIS THE PALM","image":"","stars":"","highlights":""}}, 
{"promo":{"id":"4","name":"JUMEIRAH ZABEEL SARAY 5*","image":"","stars":"","highlights":""}}, 
{"promo":{"id":"5","name":"HABTOOR GRAND BEACH RESORT & SPA","image":"","stars":"","highlights":""}}, 
{"promo":{"id":"6","name":"HILTON DUBAI JUMEIRAH RESORT","image":"","stars":"","highlights":""}} 
] 
}