Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > jQuery
jQuery Forum d'entraide sur le framework jQuery. Avant de poster : Tutoriels jQuery, FAQ jQuery, Tous les tutoriels JavaScript, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/02/2012, 21h07   #1
Membre du Club
 
Inscription : novembre 2007
Messages : 171
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 171
Points : 69
Points : 69
Par défaut Tri par clé lors d'un JSON.parse

Bonjour à tous!

Je code un site en JQuery/JSON, et j'ai un souci sous chrome !

En php ,je récupère une liste de groupes de musique dans ma base de données, triée par nom de groupe. Je retourne ensuite ça au format JSON à ma fonction javascript.

En utilisant le débugger de chrome, je peux voir que ma structure retournée par ma fonction php est :

Code :
"{"5":"10 cents for a beer","1":"Apatricid","8":"Askatasuna","6":"Chepa","11":"Kirkipete","9":"Les Enrag\u00e9s du Cerveau","3":"Les Trous Duck","7":"Nasty Froggys","10":"The Sexopath","12":"Tirtap Crew","succes":true}"
Malheureusement un tri sur les clé est fait lorsque je fait mon
Code :
retour = JSON.parse(data);
Et je me retrouve donc avec comme valeur dans retour :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
1: "Apatricid"
3: "Les Trous Duck"
5: "10 cents for a beer"
6: "Chepa"
7: "Nasty Froggys"
8: "Askatasuna"
9: "Les Enragés du Cerveau"
10: "The Sexopath"
11: "Kirkipete"
12: "Tirtap Crew"
succes: true
Vu que ces enregistrements sont destinés à renseigner une liste déroulante, mes enregistrements se retrouvent dans le désordre dans ma liste...

pour info, je parcours mes enregistrements en utilisant :

Code :
1
2
 
for(var key in retour){
A noter que sous firefox par contre, l'ordre est conservé.

Quelqu'un sait comment je pourrai retrouver mes données dans le bon ordre??

Merci à vous !
legentil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 23h19   #2
Rédacteur
 
Avatar de danielhagnoul
 
Homme Daniel Hagnoul
Étudiant perpétuel
Inscription : février 2009
Messages : 3 221
Détails du profil
Informations personnelles :
Nom : Homme Daniel Hagnoul
Âge : 61
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant perpétuel
Secteur : Enseignement

Informations forums :
Inscription : février 2009
Messages : 3 221
Points : 6 767
Points : 6 767
Bonsoir

J'ignorais cette particularité de Chrome qui s'amuse à remettre les clés numériques d'un objet dans "son ordre" ! C'est bon à savoir !

La solution la plus simple c'est de toujours utiliser une clé alphanumérique (minimum un caractère alphabétique dans la clé).

Exemple :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
"{
	"a5":"10 cents for a beer",
	"a1":"Apatricid",
	"a8":"Askatasuna",
	"a6":"Chepa",
	"a11":"Kirkipete",
	"a9":"Les Enrag\u00e9s du Cerveau",
	"a3":"Les Trous Duck",
	"a7":"Nasty Froggys",
	"a10":"The Sexopath",
	"a12":"Tirtap Crew",
	"succes":true
}"
__________________

FAQ jQuery

Mon cahier d’exercices sur jQuery & Co

Si un message vous a aidé ou vous semble pertinent, votez pour lui !
danielhagnoul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2012, 15h22   #3
Membre du Club
 
Inscription : novembre 2007
Messages : 171
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 171
Points : 69
Points : 69
Merci pour ta réponse !

Le problème c'est que mon ID doit rester numérique (il est géré par mysql avec un auto-increment) !

Après je peux toujours essayer d'ajouter un préfixe à mon ID avant de retourner les résultats et de le retirer ensuite en javascript, mais ça me paraît pas très élégant comme solution : )
legentil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2012, 19h09   #4
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 944
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 944
Points : 4 776
Points : 4 776
Bonjour,
effectivement Chrome mets de l'ordre
Citation:
Quelqu'un sait comment je pourrai retrouver mes données dans le bon ordre??
as tu besoin de l'ordre pour récupérer les datas
Code :
1
2
3
var data = '{"5":"10 cents for a beer","1":"Apatricid","8":"Askatasuna","6":"Chepa","11":"Kirkipete","9":"Les Enrag\u00e9s du Cerveau","3":"Les Trous Duck","7":"Nasty Froggys","10":"The Sexopath","12":"Tirtap Crew","succes":true}';
var retour = JSON.parse(data);
alert( retour['5']);
affiche quoiqu'il arrive le bon résultat.
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2012, 20h56   #5
Rédacteur
 
Avatar de danielhagnoul
 
Homme Daniel Hagnoul
Étudiant perpétuel
Inscription : février 2009
Messages : 3 221
Détails du profil
Informations personnelles :
Nom : Homme Daniel Hagnoul
Âge : 61
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant perpétuel
Secteur : Enseignement

Informations forums :
Inscription : février 2009
Messages : 3 221
Points : 6 767
Points : 6 767
Bonsoir

Pour obtenir une liste de (clé, valeur) dans un ordre précis il est préférable d'utiliser un array : [ [ key1, value1], [key2, value2], ...].

[Edit] Même avec des clés alphabétiques, Google s'amuse à faire "son" tri.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var d = {
	"z" : "10 cents for a beer",
	"a" : "Apatricid",
	"c" : "Askatasuna",
	"e" : "Chepa",
	"f" : "Kirkipete",
	"y" : "Les Enrag\u00e9s du Cerveau",
	"b" : "Les Trous Duck",
	"w" : "Nasty Froggys",
	"h" : "The Sexopath",
	"g" : "Tirtap Crew",
	"succes":true
};
 
var dj = JSON.stringify( d );
 
var nd = JSON.parse( dj );
 
console.log( d, "\n", dj, "\n", nd);
Mais contrairement aux clés numériques, l'affichage dans la page web reste dans l'ordre initial.

Code :
1
2
3
4
5
var tab = $.map( nd, function( value, key ){
	return [ key, value ];
});
 
$("<p>" + tab.join(", ") + "</p>").appendTo( "section.conteneur" );
__________________

FAQ jQuery

Mon cahier d’exercices sur jQuery & Co

Si un message vous a aidé ou vous semble pertinent, votez pour lui !
danielhagnoul est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h44.


 
 
 
 
Partenaires

Hébergement Web