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 en cascades


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 112
    Par défaut [AJAX] listes en cascades
    Bonjour à tous
    J'essaie à partir d'un tuto vu sur ce site de développer quelques chose qui comporterait 3 listes issues de tables différentes
    La première liste définit un crière pour la seconde et la seconde pour la 3ème.
    Une fois terminé, je voudrais pouvoir faire une requête utilisant les 3 sélect du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type select * from select1 where select2='select3"
    Voici le code actuel :
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    <head>
    		<title>Tutoriel Ajax (XHTML + JavaScript + XML)</title>
    		<script type='text/javascript'>
     
    			function getXhr(){
                                    var xhr = null; 
    				if(window.XMLHttpRequest) // Firefox et autres
    				   xhr = new XMLHttpRequest(); 
    				else if(window.ActiveXObject){ // Internet Explorer 
    				   try {
    			                xhr = new ActiveXObject("Msxml2.XMLHTTP");
    			            } catch (e) {
    			                xhr = new ActiveXObject("Microsoft.XMLHTTP");
    			            }
    				}
    				else { // XMLHttpRequest non supporté par le navigateur 
    				   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    				   xhr = false; 
    				} 
                                    return xhr;
    			}
     
    			/**
    			* Méthode qui sera appelée sur le click du bouton
    			*/
    			function go(){
    				var xhr = getXhr();
    				// On défini ce qu'on va faire quand on aura la réponse
    				xhr.onreadystatechange = function(){
    					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    					if(xhr.readyState == 4 && xhr.status == 200){
    						leselect = xhr.responseText;
    						// On se sert de innerHTML pour rajouter les options a la liste
    						document.getElementById('livre').innerHTML = leselect;
    					}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","ajaxLivre.php",true);
    				// ne pas oublier ça pour le post
    				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    				// ne pas oublier de poster les arguments
    				// ici, l'id de l'auteur
    				sel = document.getElementById('auteur');
    				id_groupe = sel.options[sel.selectedIndex].value;
    				xhr.send("id_groupe="+id_groupe);
    			}
    			function go2(){
    				var xhr = getXhr();
    				// On défini ce qu'on va faire quand on aura la réponse
    				xhr.onreadystatechange = function(){
    					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    					if(xhr.readyState == 4 && xhr.status == 200){
    						leselect = xhr.responseText;
    						// On se sert de innerHTML pour rajouter les options a la liste
    						document.getElementById('contenu').innerHTML = leselect;
    					}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","ajaxLivre2.php",true);
    				// ne pas oublier ça pour le post
    				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    				// ne pas oublier de poster les arguments
    				// ici, l'id du groupe
    				sel = document.getElementById('livre');
    				id_contenu = sel.options[sel.selectedIndex].value;
    				xhr.send("id_contenu="+id_contenu);
    			}
    		</script>
    	</head>
    	<body>
            <form>
                <fieldset style="width: 800px">
                    <legend>Listes liées</legend>
                    <label>Formations</label>
                    <select name='auteur' id='auteur' onchange='go()'>
                        <option value='-1'>Aucun</option>
                        <?php require_once('Connections/perso.php'); ?>
                          <? mysql_select_db($database_perso, $perso);
                            $res = mysql_query("SELECT * FROM categories ORDER BY categorie");
                            while($row = mysql_fetch_assoc($res)){
                                echo "<option value='".$row["id_categorie"]."'>".$row["categorie"]."</option>";
                            }
                        ?>
                    </select>
                    <label>Groupes</label>
                    <div id='livre' style='display:inline'>
                    <select name='livre'onchange='go2()'>
    <option value='-1'>Aucun</option>
                    </select>
                    </div>
     <label>Contenu</label>
                    <div id='contenu' style='display:inline'>
                    <select name='contenu'>
                        <option value='-1'>Préciser la valeur</option>
                    </select>
                    </div>
                </fieldset>
            </form>
        </body>
    </html>
    puis pour le fichier ajxLivre.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
    <?php require_once('Connections/perso.php'); ?>
     
    <?php
    echo "<select name='livre'>";
    if(isset($_POST["id_groupe"])){
    mysql_select_db($database_perso, $perso);
     
    $res = mysql_query("SELECT id_groupe,groupe FROM groupes 
    WHERE id_categorie=".$_POST["id_groupe"]." ORDER BY groupe");
    while($row = mysql_fetch_assoc($res)){
    echo "<option value='".$row["id_groupe"]."'>".$row["groupe"]."</option>";
            }
        }
        echo "</select>";
    ?>
    et enfin ajaxLivre2.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
    <?php require_once('Connections/perso.php'); ?>
     
    <?php
    echo "<select name='contenu'>";
    if(isset($_POST["id_contenu"])){
    mysql_select_db($database_perso, $perso);
     
    $res = mysql_query("SELECT id_contenu,contenu FROM contenu
    WHERE id_groupe=".$_POST["id_contenu"]." ORDER BY contenu");
    while($row = mysql_fetch_assoc($res)){
    echo "<option value='".$row["id_contenu"]."'>".$row["contenu"]."</option>";
            }
        }
        echo "</select>";
    ?>
    Je précise que le passage de la liste 1 à la lkiste 2 fonctionne bien mais c'est après que ça coince, alors si quelqu'un a des idées, je l'en remercie par avance.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2007
    Messages : 247
    Par défaut
    slt,

    c'est à dire ??

    1er pb à résoudre : remplissage du 3ème select ?
    2eme pb à résoudre : lancer une requête avec les options choisies dans les 3 select ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 112
    Par défaut
    Effectivement, le premier problème est le remplissage du 3ème sélect

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2007
    Messages : 247
    Par défaut
    slt,

    peut-être une question de mise en cache...

    commence par remplacer dans go() et go2() :
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var xhr = false;
    var xhr = new getXhr();
    et dans getXhr() supprime :
    ensuite tu as peut être intéret à faire de tes deux fonctions go() et go2() une seule, et de gérer leurs différences avec des paramètres...

    tu aurais donc la fonction go(id_à_remplir,url,id_sélection)...
    base toi sur go() qui semble fonctionner, contrairement à go2()...

    tu peux également supprimer la ligne où tu déclares :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    leselect = xhr.responseText;

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 112
    Par défaut
    Bonsoir
    j'avance un peu : je peux faire un sélect sur les listes 1 et 2, la 3 se charge également voir ici : http://bridgeclub.briochin.free.fr/auteurs.php
    Lorsque je change les valeurs de la liste 2, celles de la 3 se mettent bien à jour par contre si je veux changer la 1, j'ai un pb sur la 2 : une liste vide apparaît - sans doute un pb de nomination de div ou de select mais je ne vois pas bien alors si quelqu'un a une idée, je suis preneur.
    Merci

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 112
    Par défaut
    Bonjour
    petit à patit j'avance, les listes se remplissent bien maintenant et se modifient correctement.
    Par contre j'aurais besoin qu'elles se vident en fonction des choix faits sur liste 1 ou 2...
    Je m'explique : je fais un choix sur liste 1 ==> j'ai des options proposés en liste 2
    Je fais ensuite un choix sur liste 2==> j'ai des options en liste 3
    Je reviens sur liste 1 : il faudrait alors que liste 3 se vide !

    Donc si quelqu'un a des idées pour cela

Discussions similaires

  1. [AJAX] liste deroulante ajax
    Par klimero dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 25/04/2006, 15h26
  2. [AJAX] listes deroulantes liées x3
    Par Tempotpo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/04/2006, 16h55
  3. [Hibernate] Pb avec List et cascade
    Par mauvais_karma dans le forum Hibernate
    Réponses: 2
    Dernier message: 14/04/2006, 15h02
  4. Réponses: 7
    Dernier message: 21/03/2006, 23h01
  5. Réponses: 2
    Dernier message: 08/03/2006, 12h27

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