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 :

[AJAX] listes déroulantes imbriquées


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2005
    Messages : 78
    Points : 39
    Points
    39
    Par défaut [AJAX] listes déroulantes imbriquées
    Bonjour,

    Débutant sur Ajax, j'utilise un script connu pour créer des listes déroulantes qui est le suivant:
    seule différence c'est que j'utilise une base Oracle et non mysql.


    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
    <script type="text/javascript">
         /**
    	 * Permet d'envoyer des données en GET ou POST en utilisant les XmlHttpRequest
    	 */
    	function sendData(param, page)
    	{
    		if(document.all)
    		{
    			//Internet Explorer
    			var XhrObj = new ActiveXObject("Microsoft.XMLHTTP") ;
    		}//fin if
    		else
    		{
    		    //Mozilla
    			var XhrObj = new XMLHttpRequest();
    		}//fin else
     
    		//définition de l'endroit d'affichage:
    		var content = document.getElementById("contenu");
     
    		XhrObj.open("POST", page);
     
    		//Ok pour la page cible
    		XhrObj.onreadystatechange = function()
    		{
    			if (XhrObj.readyState == 4 && XhrObj.status == 200)
    				content.innerHTML = XhrObj.responseText ;
    				//alert(content.innerHTML);
    		}
     
    		XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    		XhrObj.send(param);
    	}//fin fonction SendData
    </script>

    puis la partie select :

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    echo "<TR><TD class=\"tnav\"> Choix de la session : </TD>";
      echo "<TD>";
    	// connexion a oracle pour la liste des options de session disponibles  
    	Putenv("ORACLE_HOME=/oracle/product/920");
    	$db = "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL = TCP) (HOST = xxxxx) ( PORT = xxxxx))) (CONNECT_DATA =(SID=xxxxx)))";
     
    	$login='xxx';$mdp='xxx';
    	$conn=OCILogon($login,$mdp,$db);
    	$i=0; // variable de test
        $j=0; // variable pour garder la valeur du premier enregistrement catégorie pour l'affichage
     
     
    	if (!$conn) {
            echo "l'utilisateur n'a pu se connecter";
            } else {
    	if (!isset($session)) {
    	$query0="select COD_SESSION,LIBELLE from session";
     
    	$state0=ociparse($conn,$query0);
    	OCIexecute($state0);
     
     
    	echo "<form method='POST' action='valid.php'>";
    ?>
    	<select size='1' name='cat' OnChange="sendData('id='+this.value,'lire_rdv.php')" onKeyUp="sendData('id='+this.value,'lire_rdv.php')">
    <?php
    	while (ociFetchInto($state0,$result0))
    	{		
    	// Remplir la liste déroulante des catégories	
    	echo "<option value=".$result0[0].">".$result0[1]."</option>";
        if ($i==0) { $j=$result0[0]; $i=1; } // garder la valeur du premier enregistrement
    	}
      }      
      echo "</select></TD></TR>";  
      echo "<div id=\"contenu\">";
      echo "<TR><TD class=\"tnav\"> Choix du rendez-vous : </TD>";
      echo "<TD><select size='1' name='souscat'>";
     
     
      	$query1="select COD_SESS,DATE_RDV,HEURE_RDV from rdv where COD_SESS=$j";
      	//echo $query1;
        $state1=ociparse($conn,$query1);
    	OCIexecute($state1);
    	$i=0;
    	while (ociFetchInto($state1,$result1))
    	{
    	 echo "<option value=".utf8_encode($result1[0]).">".utf8_encode($result1[1])." ".utf8_encode($result1[2])."</option><br>";
        }    
     
    	} 
     
        OCILogoff($conn);  
      echo "</select></TD></TR>";   
     
      echo "</table>";
      echo "<table>";
      echo "</div>";
    puis le script d'appel dans OnChange :

    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
    <?php
    header('Content-type: text') ; // on déclare ce qui va être affiché
    $html = "";
    // test des POST emis
    if(isset($_POST['id']) && !empty($_POST['id']) ){
       Putenv("ORACLE_HOME=/oracle/product/920");
    	$db = "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL = TCP) (HOST = xxxx) ( PORT = xxxx))) (CONNECT_DATA =(SID=xxxxx)))";
     
    	$login='xxx';$mdp='xxx';
    	$conn=OCILogon($login,$mdp,$db);
    	if (!$conn){
            $html =  "l'utilisateur n'a pu se connecter";
            } else {
            $query1="select COD_SESS,DATE_RDV,HEURE_RDV from rdv where COD_SESS=".$_POST['id'];
        $state1=ociparse($conn,$query1);
    	OCIexecute($state1);
         // $i = initialise la variable i
        $i=0;
    	/*if (ociFetchStatement($state1,$result1)>0)
    	{
    	  $html =  "<select size='1' name='souscat'>";
    	}
    	else
    	{
    	  $html =  utf8_encode("Pas de rdv disponible");	
    	}*/
       $html =  "<select size='1' name='souscat'>";
       while (ociFetchInto($state1,$result1))
        { 	
    	 $html .= "<option value=".utf8_encode($result1[0]).">".utf8_encode($result1[1])." ".utf8_encode($result1[2])."</option><br>";
        }    
    	$html .= "</select>";
    }
    OCILogoff($conn);
    }
    print $html;
    ?>
    premier problème : ça marche dans Firefox et pas du tout sous IE7

    deuxième problème : sous Firefox ça m'affiche un nouveau select au lieu de rafraichir le select déja existant.

    une solution ? merci de votre aide

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2005
    Messages : 78
    Points : 39
    Points
    39
    Par défaut
    problème résolu:

    il semble donc que sous IE le innerHTML ne fonctionne que sur un <div> contrairement a Firefox et que ma balise <div> soit bien placée juste devant le <select>.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2005
    Messages : 78
    Points : 39
    Points
    39
    Par défaut
    Je reviens à nouveau sur ce code qui pose problème suivant la version de navigateur.
    avec IE avec une balise <div id='contenu'> je récupère bien la valeur 'souscat' de mon select par contre pas avec firefox.

    quelqu'un peut il me proposer une solution multi navigateur ?

    merci

Discussions similaires

  1. [AJAX] Listes déroulantes
    Par gscorpio dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/12/2006, 09h15
  2. [AJAX] Liste déroulante pour afficher les informations en ajax div ?
    Par rob2-9 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 17/11/2006, 09h06
  3. [AJAX] Liste déroulante qui ne s'actualise pas avec XMLHttpRequest
    Par zoom61 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 14/11/2006, 09h52
  4. Liste déroulante imbriquée importée depuis une Bdd
    Par WhyMee dans le forum Général JavaScript
    Réponses: 27
    Dernier message: 07/08/2006, 16h48
  5. [AJAX] Listes déroulantes liées avec Ajax
    Par paupiette dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/08/2006, 16h51

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