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

Bibliothèques & Frameworks Discussion :

Mise à jour d'un select via php : ok sur FF, pas sur IE6 [Dojo]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 291
    Points : 217
    Points
    217
    Par défaut Mise à jour d'un select via php : ok sur FF, pas sur IE6
    Bonjour,

    j'ai vu que cette question avait déja été traitée mais je n'arrive pas à tout comprendre.

    Je remplis un select en appelant un script php via dojo.io.bind() (c'est pareil que si je faisais une requete XMLHTTPRequest). Sous FF mon select se remplit parfaitement. Par contre sous IE6, via IE developer toolbar je vois que mon select est bien rempli mais par contre à l'affichage il est vide...

    Je rempli le select via inner.html. Je sais que ce n'est pas le mieux, mais comment faire autrement puisque je recupere de ma requete au serveur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <option id="37" value="Machin">Machin</option><option id="38" value="Bidule"
    >Bidule</option>
    Je ne peux pas faire de new option(...).

    Alors comment faire???

    Merci de votre aide

  2. #2
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par fayred Voir le message
    Je ne peux pas faire de new option(...).
    Si mais il faudrait parser....

    Essaye éventuellement de modifier le type du bouton submit de ton formulaire en submit (oui, je sais ça change pas grand chose), après avoir inséré le contenu dans le select.
    Cette opération assez étrange déclenche dans IE 6 une prise en compte des nouveautées dans le formulaire (enfin parfois).

    Sinon, il faudra parser la réponse et faire des new option / insertions en DOM. Et éventuellement changer le format dans lequel tu transmets tes données pour quelque chose de plus adapté (JSON?)

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 291
    Points : 217
    Points
    217
    Par défaut
    Merci pour ta réponse.
    Effectivement je vais me tourner vers JSON : aurais-tu un lien vers un tuto car je ne suis pas sure de la syntaxe pour envoyer une chaine JSON remplie dynamiquement par php?

    Voila ou j'en suis :
    fichier php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    /*Requete mysql*/
    echo "[";
     
    while($result=mysql_fetch_array($res))
    		 { 
    			echo ("{\"id\":".$result['nom'].", \"value\":".$result['nom']."}"); 
     
     
    		 }
    echo "]";
    au niveau javascript (avec utilisation de dojo)
    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
     
    var leSelectmaj=document.getElementById('nomSalarie');
    	dojo.io.bind({
                           url: 'php/scriptMaj.php',  			   
    					   load: function(type, data, evt)
    								{
    									if (type=="load")
    									{
    										//Traitement du JSON...
    										while (leSelectmaj.childNodes.length>0) {
    										  leSelectmaj.removeChild(leSelectmaj.firstChild);
    										}
    										var retour=data;
    										for (var i in retour)
    										{
    											var unS=retour[i];
    											opt = document.createElement('option') ;
    											opt.value = retour.value ; 
    											opt.id = retour.id ; 
     
    											leSelectmaj.appendChild(opt) ;
    										}
     
     
    									}
    								 },
     
                          	mimetype:"text/json"
                        });
    Selon firebug je recupere bien mes donnees :

    Response du script php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [{"id":37, "value":Machin },{"id":38, "value":Machine },{"id":34, "value":Bidule } ]
    Pourtant mon select est vide...

    EDIT : lorsque j'affiche ce que je reçois du serveur j'ai "False". Il y a donc surement un problème au niveau envoi de json enphp...

  4. #4
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par fayred Voir le message
    Response du script php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [{"id":37, "value":Machin },{"id":38, "value":Machine },{"id":34, "value":Bidule } ]
    Les chaines de caractères doivent être entre Guillemets. Pour les nombres, ce n'est pas nécessaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [{"id":37, "value":"Machin" },{"id":38, "value":"Machine" },{"id":34, "value":"Bidule" } ]

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 291
    Points : 217
    Points
    217
    Par défaut
    Enfin! ça y est! ça fonctionne!

    Voici le code final :

    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
     
    $retour.= "[";
    		$nb=mysql_num_rows($res); 
    		$i=0;
    		while($result=mysql_fetch_array($res))
    		 { 
     
    			$id=$result['id_salarie'];
    			$valeur=$result['nom'].'-'.$result['prenom']; 
    			$contenu=$result['nom'].' '.$result['prenom'];
     
    			 $retour.= ("{\"id\":".$result['id_salarie'].", \"value\":\"".$result['nom'].'-'.$result['prenom']."\", \"contenu\":\"".$result['nom'].' '.$result['prenom']."\"}"); 
    			if ($i!=$nb-1)
    				{ 
    					$retour.=",";
    				}
    			$i++;
    		 }
     
    		$retour.="]";
    		echo $retour;
    code javascript avec utilisation de dojo.io.bind

    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
     
    var leSelectmaj=document.getElementById('nomSalarie'); 
    //On nettoie le select avant d'y inserer de nouveaux elements
    	while (leSelectmaj.childNodes.length>0) {
    		leSelectmaj.removeChild(leSelectmaj.firstChild);
    	}
    	dojo.io.bind({
                           url: 'php/scriptMaj.php',  			   
    					   load: function(type, data, evt)
    								{
    									if (type=="load")
    									{
    										//Traitement du JSON...
     
     
    										var retour=eval(data);
     
    										for (var i in retour)
    										{
    											var uneL=retour[i];
    											leSelectmaj.appendChild(new Option (uneL.contenu,uneL.value,false, false ));
     
    									}
    								 },		
                          	mimetype:"text/plain"
                        });
    Voili voilou!!!

    Merci encore denisC !

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 291
    Points : 217
    Points
    217
    Par défaut
    J'ai crié victoire trop tôt : j'avais oublié de tester avec ie

    Donc en fait le code ci-dessus marche nickel avec FF.
    Avec IE par contre c'est tres bizarre :
    • Les options sont bien crées
    • la value de l'option est bien rempli
    • mais pas le contenu!!!!

    Si j'ai 10 noms j'ai 10 cases vides dans mon select...
    Est-ce que IE a du mal avec new Option()???

    EDIT : j'ai la solution (est-ce bien propre?) grâce à ce site.

    remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    leSelectmaj.appendChild(new Option (uneL.contenu,uneL.value,false, false ));
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    leSelectmaj.options.add(new Option (uneL.contenu,uneL.value,false, false ));
    Cette fois, c'est bon !
    @+

  7. #7
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par fayred Voir le message
    EDIT : j'ai la solution (est-ce bien propre?)
    C'est pas propre parceque ce n'est W3C, mais de la syntaxe IE, qui a été portée sur Firefox pour des soucis de compatibilité. Mais je ne pense pas que tu trouveras une solution plus propre.

    Enfin, ça fonctionne, c'est l'essentiel

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/05/2018, 20h58
  2. Réponses: 4
    Dernier message: 01/02/2012, 16h16
  3. Mise à Jour d'une table via un Update (select)
    Par Arola78 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 23/09/2006, 14h59
  4. Réponses: 3
    Dernier message: 02/01/2006, 11h53
  5. [Debutant(e)]mise à jour de mon formulaire via JSP
    Par kouadjalain dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 11/08/2004, 15h43

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