IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

Conserver l'ordre d'éléments JSON reçus, sans qu'ils soient ré ordonnés par ID ?


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 66
    Par défaut Conserver l'ordre d'éléments JSON reçus, sans qu'ils soient ré ordonnés par ID ?
    Bonjour à toutes et à tous,

    Je reçois par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $.ajax(
    	{
    	type: "POST",
    	url: "<?php echo base_url('index.php/ORDRES_TRANSPORTS/ordres_transports_c/XHR_liste_chauffeurs_disponibles');?>/"+date_heure_ordre_transport_DATE,
    Le tableau JSON suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"inconnu":"inconnu","21":"21 : Nils Bbb \u279c astreinte","1":"1 : Alain-Bernard Delarose \u279c astreinte","67":"67 : Val\u00e9rie Delarose \u279c maladie","24":"24 : Albert Einstein \u279c maladie"}
    Et j'exploite ces données pour reconstruire une liste déroulante avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $.each(liste_chauffeurs_disponibles,function(id_chauffeur,texte)
    		{
    		// On crée les options du select.
    		var	opt = $('<option />');
    			opt.val(id_chauffeur);
    			opt.text(texte);
     
    			console.log($(opt));
     
    		// On positionne ces nouvelles options à la suite des options existantes (qui ont été supprimées au début !)
    		// pour le select identifié par id="id_chauffeur"
    		$('#id_chauffeur').append(opt);
    		}
    	);
    Mon problème est que cette fonction $.each() ordonne les résultats par les Id (à gauche des : ).

    Les données reçues dans cet ordre :
    "inconnu":"inconnu",
    "21":"21 : Nils Bbb \u279c astreinte",
    "1":"1 : Alain-Bernard Delarose \u279c astreinte",
    "67":"67 : Val\u00e9rie Delarose \u279c maladie",
    "24":"24 : Albert Einstein \u279c maladie"

    Deviennent, après traitement du $.each(), une liste déroulante dans cet ordre :
    "1":"1 : Alain-Bernard Delarose \u279c astreinte",
    "21":"21 : Nils Bbb \u279c astreinte",
    "24":"24 : Albert Einstein \u279c maladie"
    "67":"67 : Val\u00e9rie Delarose \u279c maladie",
    "inconnu":"inconnu",

    Alors, que je voudrais conserver l'ordre original qui est alphabétique sur les noms (extract SQL) et avec inconnu en premier.

    Ici, je lis "Bovino, tu peux maîtriser l'ordre de tes champs via l'attribut DataMember de la classe que tu souhaites serialiser en JSON".
    J'ai cherché DataMember, mais je ne vois pas comment l'utiliser ?

    Comment faire ça ?
    Merci.

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 670
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 670
    Par défaut
    la dernière fois que j'ai eu ce problème, j'ai décomposé le tableau en une liste des clés et une liste des valeurs qui sont ensuite envoyés en JSON

  3. #3
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 209
    Par défaut
    Bonjour,
    n'aurais tu pas meilleur compte de passer par un Array d'objet JSON qui correspond plus à la structure que tu cherches à manipuler.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 66
    Par défaut
    Salut,

    et oui, c'est bien ça la solution, construire un tableau [0],[1],[2], dont les indices pointent chacun vers un tableau associatif de données.

    J'ai un peu galéré à le mettre en place, mais au final, ça marche !

    Voici le résultat corrigé qu'il fallait obtenir pour conserver l'ordre du tableau PHP/JSON, une fois passée dans la routine pour créer ma liste déroulante.

    Tableau en construit en PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     Array
    (
        [0] => Array
            (
                [id_chauffeur] => inconnu
                [prenom] => Pas de chauffeurs
                [nom] => 
                [date] => 
                [type_date] =>  -
            )
     
        [1] => Array
            (
                [id_chauffeur] => 68
                [prenom] => Aaabbb
                [nom] => aaa
                [date] => 2015-09-03
                [type_date] => astreinte
            )
     
        [2] => Array
            (
                [id_chauffeur] => 21
                [prenom] => Nils
                [nom] => Bbb
                [date] => 2015-09-03
                [type_date] => astreinte
            )
     
        [3] => Array
            (
                [id_chauffeur] => 67
                [prenom] => Valérie
                [nom] => Delarose
                [date] => 2015-09-03
                [type_date] => maladie
            )
     
    )
    Tableau reçu via JSON :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    [{
        "id_chauffeur": "inconnu",
        "prenom": "Pas de chauffeurs",
        "nom": "",
        "date": "",
        "type_date": " -"
    }, {
        "id_chauffeur": "68",
        "prenom": "Aaabbb",
        "nom": "aaa",
        "date": "2015-09-03",
        "type_date": "astreinte"
    }, {
        "id_chauffeur": "21",
        "prenom": "Nils",
        "nom": "Bbb",
        "date": "2015-09-03",
        "type_date": "astreinte"
    }, {
        "id_chauffeur": "67",
        "prenom": "Val\u00e9rie",
        "nom": "Delarose",
        "date": "2015-09-03",
        "type_date": "maladie"
    }]
    Et voici le code pour créer la liste déroulante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for (i = 0; i < Object.keys(liste_chauffeurs_disponibles).length; i++) {
        console.log(liste_chauffeurs_disponibles[i]);
        // On crée les options du select.
        var opt = $('<option />');
        opt.val(liste_chauffeurs_disponibles[i].id_chauffeur);
        opt.text(liste_chauffeurs_disponibles[i].id_chauffeur + ' : ' + liste_chauffeurs_disponibles[i].prenom + ' ' + liste_chauffeurs_disponibles[i].nom + ' \u21A6 ' + liste_chauffeurs_disponibles[i].type_date);
        // On positionne ces nouvelles options à la suite des options existantes (qui ont été supprimées au début !)
        // pour le select identifié par id="id_chauffeur"
        $('#id_chauffeur').append(opt);
    }
    Mille merci !
    Nils

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [OL-2010] Comment "espacer" les messages reçus pour qu'ils soient plus visibles. ?
    Par jean du 86 dans le forum Outlook
    Réponses: 2
    Dernier message: 20/03/2015, 09h33
  2. [XSLT 1.0] Conserver l'ordre des éléments
    Par med.k dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 27/09/2013, 18h06
  3. [RegEx] Comment mentionner <? et ?> sans qu'ils soient interprétés ?
    Par calahaan dans le forum Langage
    Réponses: 16
    Dernier message: 20/09/2006, 10h50
  4. [C#] ordre des éléments dans un datagrid
    Par liliprog dans le forum ASP.NET
    Réponses: 3
    Dernier message: 19/09/2005, 16h31
  5. Réponses: 11
    Dernier message: 17/01/2005, 16h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo