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

JavaScript Discussion :

liste déroulante incomplète (json)


Sujet :

JavaScript

  1. #1
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut liste déroulante incomplète (json)
    Bonjour tout le monde,

    J'aimerais créer une liste de sélection en javascript via un retour de PHP (AJAX).

    Voici le retour de PHP :


    {"":"Choix d'un pharmacien","11111":"Brankaer jean Pierre pour DUPONT Marie","11111":"Brankaer jean Pierre pour HUBERT Laurent","222222":"Cousin Jean Luc pour DUPONT Marie","222222":"Cousin Jean Luc pour HUBERT Laurent","35654":"Jamon Jose pour HUBERT Laurent"}
    La page crée la liste déroulante mais ne mets que ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <select id="liste_et" onchange="afficher_info_etudiant_ou_pas(this.value,'admin')">
    <option value="">Choix d'un pharmacien</option><option value="11111">Brankaer jean Pierre pour HUBERT Laurent</option><option value="222222">Cousin Jean Luc pour HUBERT Laurent</option><option value="35654">Jamon Jose pour HUBERT Laurent</option></select>

    Je n'obtiens que 3 valeurs alors qu'il y en a 5.

    Voici le code PHP qui génère la chaine json :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if($_POST['choix_admin'] == 'pharmaciens') 
    		{
    			$sql_mds = "SELECT * , etudiants.Prenom AS etudiant_prenom, etudiants.Nom AS etudiant_nom, pharmaciens.Nom AS pharmacien_nom  FROM etudiants_pharmaciens INNER JOIN etudiants ON etudiants.Matricule = id_etudiants INNER JOIN pharmaciens ON pharmaciens.INAMI = id_pharmaciens ORDER BY pharmaciens.nom, etudiants.nom ";
    			//echo $sql_mds;
    			$query_mds = mysql_query($sql_mds);
     
    			while($res = mysql_fetch_array($query_mds))
    			{
     
    				$return .='"'.$res["INAMI"].'":"'.$res["pharmacien_nom"].' '.$res["Prenom"].' pour '.$res['etudiant_nom'].' '.$res['etudiant_prenom'].'",';					
     
    			}
    Et voici le code javascript qui génère la liste de sélection :

    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
    leretour = xhr.responseText;
    				//alert(leretour);
    				emptySel(document.getElementById('liste_et'));
    				MesOption=eval("(" + leretour + ")");
     
    				for (key in MesOption) 
    				{
    					LeTexte = MesOption[key];
    					LaValeur = key;
    					//alert(LaValeur);
    					var NewOption = document.createElement('option');
    					NewOption.value = LaValeur;
    					NewOption.innerHTML=LeTexte;
    					document.getElementById('liste_et').appendChild(NewOption);
    				}
    Voyez-vous où se trouve le problème ?

    Merci d'avance.
    beegees

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Par défaut
    Bonjour,

    Comme tu l'as dit :
    ma liste déroulante n'accepte pas la redondance des données, comment résoudre ce problème ?
    Mais, en fait ce n'est pas la liste déroulante qui n'accepte pas la "redondance" des données...
    Ta chaine de caractère json (comme son nom l'indique JavaScript Object Notation) est une représentation d'un objet javascript.

    Lors de l'évaluation de la chaine, javascript construit donc l'objet pour le mettre en mémoire, et dans ta chaine, tu définis plusieurs valeurs pour une même propriété/clé, il n'y a que la dernière valeur qui n'est prise en compte (écrasant la valeur précédente).

    Il faut donc que tu changes la représentation de ta chaine json, tu peux t'appuyer sur un tableau d'objet, l'objet étant constitué ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    {
       "valeur":"...",
       "libelle":"..."
    }
    Ainsi, ta chaine devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [
       {"valeur":"","libelle":"Choix d'un pharmacien"},
       {"valeur":"11111","libelle":"Brankaer jean Pierre pour DUPONT Marie"},
       {"valeur":"11111","libelle":"Brankaer jean Pierre pour HUBERT Laurent"},
       {"valeur":"222222","libelle":"Cousin Jean Luc pour DUPONT Marie"},
       {"valeur":"222222","libelle":"Cousin Jean Luc pour HUBERT Laurent"},
       {"valeur":"35654","libelle":"Jamon Jose pour HUBERT Laurent"}
    ]
    Il te faut également modifier la fonction javascript qui va construire tes "OPTION" :
    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
    leretour = xhr.responseText;
    //alert(leretour);
    emptySel(document.getElementById('liste_et'));
    MesOption=eval(leretour);
    var nbOptions = MesOption.length;
    for (var i=0;i<nbOptions;i++) 
    {
    	LeTexte = MesOption[i].libelle;
    	LaValeur = MesOption[i].valeur;
    	//alert(LaValeur);
    	var NewOption = document.createElement('option');
    	NewOption.value = LaValeur;
    	NewOption.innerHTML=LeTexte;
    	document.getElementById('liste_et').appendChild(NewOption);
    }
    A+

  3. #3
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Salut,

    Merci pour tes explications claires et précises.

    Mais, en fait ce n'est pas la liste déroulante qui n'accepte pas la "redondance" des données...
    Ta chaine de caractère json (comme son nom l'indique JavaScript Object Notation) est une représentation d'un objet javascript.

    Lors de l'évaluation de la chaine, javascript construit donc l'objet pour le mettre en mémoire, et dans ta chaine, tu définis plusieurs valeurs pour une même propriété/clé, il n'y a que la dernière valeur qui n'est prise en compte (écrasant la valeur précédente).
    Là, tu m'apprends quelque chose

    Va donc falloir que je crée ma chaine json sous forme de tableau comme tu me le conseilles.

    J'ai tenté ceci :

    Début de ma chaine json :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $return .= "{data: [{val: '', text: 'Choix d\'un pharmacien'},";
    Suite de ma chaine json :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $return.= '{val: '.$res["INAMI"].',text:\''. $res["pharmacien_nom"].' '.$res["Prenom"].' pour '.$res['etudiant_nom'].' '.$res['etudiant_prenom'].'\'},';
    Je ne sais pas si c'est correcte.

    Avec mon ancienne méthode, je remplaçais la dernière virgule de ma chaine par }.

    Faudra maintenant modifier cette ligne de code.

    Fin de ma chaine json :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $return=preg_replace("/,$/","}]",$return);
    Encore merci pour ton aide, j'ai appris quelque chose d'important aujourd'hui.

    beegees

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

Discussions similaires

  1. [XL-2003] Liste déroulante incomplète
    Par JM741 dans le forum Excel
    Réponses: 3
    Dernier message: 14/01/2015, 09h58
  2. Créer une liste déroulante avec jquery et json
    Par beegees dans le forum jQuery
    Réponses: 2
    Dernier message: 30/04/2012, 11h46
  3. Réponses: 2
    Dernier message: 25/10/2007, 15h18
  4. liste déroulante en ASP vbscript
    Par leeloo076 dans le forum ASP
    Réponses: 9
    Dernier message: 17/03/2004, 16h42
  5. Listes déroulantes liées entre elles
    Par denisC dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 27/07/2002, 15h53

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