Page 1 sur 1

exploiter une chaine JSON

Posté : 05 août 2011, 17:26
par Invité
Bonjour, je rencontre actuellement un problème pour exploiter une chaine json

je réupère cette chaine json via une requete AJAX, la chaine ressemble à sa : {"name1":"John","name2":Olivier",..."i":"le nbr de nom"} j'aimerai récupéré ces nomx pour les mettre dans une liste select (donc avoir une list déroulante avec les noms à choisir.

Code : Tout sélectionner

var obj = e; for(i=1;i=<obj.i;i++) { $("#div").append("<option>"+obj.(nom+i)+"</option>"); }
Mon souçis est queje n'arrive pas à accéder à la valeur de ces éléments comme sa...On m'a proposé d'utiliser un tableau mais je ne vois pas comment faire pour résoudre mon problème par ce biais. Je ne connais pas à l'avance le nombre de nom dans la chaine car ils dépendent d'un utilisateur qui peut en avoir enregistrer autant qu'il veut.

J'ai tenté de le résoudre avec window['obj.nom'+i] mais je n'ai pas réussi (une erreur quelque part)...

Code : Tout sélectionner

$("#div").append("<option>"+window['obj.nom'+i]+"</option>");
quelqu'un a t'il une idée?Merci d'avance

Re: exploiter une chaine JSON

Posté : 06 août 2011, 04:55
par devlop78
Tu l'as parsé ton JSON au moins ?

Si tu utilises Firefox, tu peux voir les messages d'erreurs dans Outils->Console d'erreurs
{"name1":"John","name2":Olivier",..."i":"le nbr de nom"}
Est un objet. Mais en Javascript, un tableau c'est un objet avec un comportement et des méthodes particulières. Ici, on a l'équivalent du tableau associatif PHP, mais le "i" ne me semble pas utile.

Tu peux donc avoir ainsi :

Code : Tout sélectionner

var json = {"n1":"John","n2":"Olivier"};
ou

Code : Tout sélectionner

var json = ["John","Olivier"];
Puis :

Code : Tout sélectionner

var objet = eval(json); // Normalement, ça marche, mais perso j'aime pas trop, je préfère les méthodes de parsage alert ("j'ai " + objet.length.toString() + " élements dans mon objet"); for (var i in objet) // Attention, i est la clé, pas forcément la position { alert(objet[i]); }

Re: exploiter une chaine JSON

Posté : 06 août 2011, 04:56
par devlop78
J'avais pas vu que tu utilisais jQuery :

http://api.jquery.com/jQuery.parseJSON/

Re: exploiter une chaine JSON

Posté : 07 août 2011, 19:54
par ownedsoi
j'utilise bien la méthode parseJSON de Jquery avant.

Code : Tout sélectionner

jqcc.ajax({ type: 'POST', url: '/facturajax/getcompanycontacts', data: 'id_groupe='+jqcc("select#company option:selected").attr("id"), cache: false, async: false, success:function(e){ alert(e); var obj = parseJSON(e); // alert(obj.firstname+i); $("#companycontacts").empty(); $("#companycontacts").append('<label for="companycontacts">contacts du groupe</label><select>'); for(var i=0;i<=obj.i;i++) { $("#companycontacts").append('<option>'.obj.namei.'</option>)';//namei ne marche pas évidement mais en gros c'est comme sa que j'aimerai que sa marche } $("#companycontacts").append('</select>'); }, error:function(XMLHttpRequest, textStatus, errorThrows){ alert(errorThrows); } });

Re: exploiter une chaine JSON

Posté : 08 août 2011, 10:35
par Invité
Merci pour le conseil sur le tableau.j'ai tenté ce code ci. (la chaine ressemble maintenant à "nom1" :"","prenom1":"","nom2","prenom2"...)

Code : Tout sélectionner

success:function(e){ alert(e); var a = 1; var obj = jqcc.parseJSON(e); jqcc("#companycontacts").empty(); jqcc("#companycontacts").append('<label for="companycontact">contacts du groupe</label><select name="companycontact">'); for (var i in obj) // Attention, i est la clé, pas forcément la position {//les if servent à mettre le nom et prenom à la suite comme un seul élément de la liste je n'ai pas trouvé d'autre moyen pour l'instant if(a == 1) { jqcc("#companycontacts").append('<option value="'+obj[i]+'">'+obj[i]); a = 0; } else(a == 0) { jqcc("#companycontacts").append(obj[i]+'</option>'); a = 1; } } jqcc("#companycontacts").append('</select>');
Sa marche presque sauf que les nom n'apparaissent pas dans le select mais après (j'ai vu sa dans le firebug de chrome)
<select></select>
<option>toto tutu</option>
toto tutu
<option>gustave jean</option>
gustave jean 
etc. As tu une idée pour ce 2e pb?

Re: exploiter une chaine JSON

Posté : 11 août 2011, 05:05
par devlop78
Oui, n'oublie pas que tu manipules avec DOM, ce n'est pas une simple concaténation. Ton append() doit donc contenir un code HTML valide.