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 liées


Sujet :

JavaScript

  1. #1
    Membre éclairé Avatar de Jiraiya42
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    671
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 671
    Par défaut [AJAX] Listes déroulantes liées
    Salut !

    J'ai un soucis. J'aimerais mettre en place des listes déroulantes liées. J'ai 3 fichiers : index.php contenant les listes déroulantes, Func.js contenant la fonction et liste.php contenant le code php.

    La première liste déroulante se charge normalement mais la seconde ne réagit pas en fonction de cette dernière. De plus, j'aimerais pouvoir répéter ce système dans ma page pour d'autres données.

    index.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
     
    <html>
    <head>
    <SCRIPT type="text/javascript" src="Func.js"></script>
    </head>
    <body>
    <div class="Centered">
    	<form class="CenteredForm" name="form_selects" id="form_selects" action="" method="" onsubmit="return false;">
    		<fieldset>
    			<legend>Choix</legend>
    			<div class="Left">
    			Département&nbsp;:
    			<select name="list1" id="list1" class="ButtonL" onchange="request05(this.form)">
    			<option value="" selected="selected">Choix</option>
    			<?php
                            require 'Connect.php';
                            mysql_connect(SERVER, NAME, PASSWD) or die('Erreur SQL lors de la tentative de connexion à la base. Détails : '.mysql_error());
                            mysql_select_db(BASE) or die('Erreur SQL lors de la sélection de la base. Détails : '.mysql_error());
                            $listDep = mysql_query("SELECT DISTINCT Dep_Com FROM commune ORDER BY Dep_Com;") 
                                       or die('Erreur SQL lors de la récupération des départements. Détails : '.mysql_error());
                            while ($data = mysql_fetch_assoc($listDep))
                            {
                                    echo "<option value".$data['Dep_Com'].">".$data['Dep_Com']."</option>";
                            }
                            ?>
    			</select>
     
    			<select name="list2" id="list2" class="ButtonL">
     
    			</select>
    			</div>
    		</fieldset>
    	</form>
    </div>
    </body>
    </html>
    Func.js

    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 l1    = f.elements["list1"];   
     var l2    = f.elements["list2"];   
     var index = l1.selectedIndex;   
     if(index < 1)   
        l2.options.length = 0;   
     else {   
        var xhr_object = null;   
     
        if(window.XMLHttpRequest) // Firefox   
           xhr_object = new XMLHttpRequest();   
        else if(window.ActiveXObject) // Internet Explorer   
           xhr_object = new ActiveXObject("Microsoft.XMLHTTP");   
        else { // XMLHttpRequest non supporté par le navigateur   
           alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");   
           return;   
        }   
     
        xhr_object.open("POST", "liste.php", true);   
     
        xhr_object.onreadystatechange = function() {   
           if(xhr_object.readyState == 4)   
              eval(xhr_object.responseText);   
        }   
     
        xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");   
        var data = "departement="+escape(l1.options[index].value)+"&form="+f.name+"&select=list2";   
        xhr_object.send(data);   
     }
    liste.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
     
    <?php
    header('Content-type: text/html; charset=iso-8859-1');   
     
     // Déclaration des fichiers à utiliser
     require 'Connect.php';
     
     // On se connecte à la de données
     mysql_connect(SERVER, NAME, PASSWD) or die('Erreur SQL lors de la tentative de connexion à la base. Détails : '.mysql_error());
     mysql_select_db(BASE) or die('Erreur SQL lors de la sélection de la base. Détails : '.mysql_error());
                                       
     $query  = "SELECT DISTINCT Cp_Com FROM commune WHERE Dep_Com = '".$_POST["departement"]."'";   
     $query .= " ORDER BY Cp_Com;";   
     $result = @mysql_query($query);   
       
     echo 'var o = null;';   
     echo 'var s = document.forms["'.$_POST["form"].'"].elements["'.$_POST["select"].'"];';   
     echo 's.options.length = 0;';   
     while($r = mysql_fetch_array($result))   
         echo 's.options[s.options.length] = new Option("'.$r["departement"].'");';   
     
     @mysql_close($mysql_db); 
     ?>
    Quelqu'un peut m'aider svp ? Ce serait sympa car c'est très urgent !

    Merci d'avance...

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Bonjour,
    a priori il manque le "=" ici, ce qui a des chances de tout bloquer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<option value=".$data['Dep_Com'].">
    EDIT : de plus, des ' (simples quotes) autour de la value seraient bienvenu (si elle contient un espace => )

    A+

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2007
    Messages : 340
    Par défaut
    dans ton func.js il te faut englober ton code dans une fonction que tu appeleras sur le onLoad de ton body. Car dans ton cas, le javascript s'éxecute avant le chargement complet de ta page.

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par madevilts Voir le message
    dans ton func.js il te faut englober ton code dans une fonction que tu appeleras sur le onLoad de ton body. Car dans ton cas, le javascript s'éxecute avant le chargement complet de ta page.
    Elle est visiblement (et logiquement) appelée sur le onchange du premier select :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     onchange="request05(this.form)"
    A+

  5. #5
    Membre éclairé Avatar de Jiraiya42
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    671
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 671
    Par défaut
    Merci pour vos réponses.

    J'ai fait le changement avec le "=" et la simple quote mais ça ne fonctionne pas. La deuxième liste ne réagit pas selon le choix de la première. Le Deuxième reste désespérément vide.

    Quelqu'un peut m'aider svp ? Merci d'avance...

    EDIT : Je pense que le problème doit-être au niveau de la transmission de la valeur du select car j'ai testé la requête SQL et elle fonctionne très bien. Du coup, ça expliquerait le select vide mais je ne vois pas où est l'erreur !

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par Jiraiya42 Voir le message
    EDIT : Je pense que le problème doit-être au niveau de la transmission de la valeur du select
    Si tu fais un alert(data) avant l'envoi, les paramètres sont bons ?
    Si oui : si tu entres l'url appelée par Ajax (avec les paramètres) directement dans la barre d'adresse, est-ce que le nav t'affiches bien le script JS qui doit être interprété par le eval() ?
    En cas de doute, colle le résultat ici ...

    A+

  7. #7
    Membre éclairé Avatar de Jiraiya42
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    671
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 671
    Par défaut
    J'ai mit le alert et il ne s'exécute même pas !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");   
        var data = "departement="+escape(l1.options[index].value)+"&form="+f.name+"&select=list2";  
        alert(data);	
        xhr_object.send(data);

  8. #8
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par Jiraiya42 Voir le message
    J'ai mit le alert et il ne s'exécute même pas !
    Tu dois avoir des erreurs JS alors ?
    Sont-elles bien activées dans le nav ?
    As-tu testé avec Firebug ?
    Peut-on avoir le code complet de request05() ?

    A+

  9. #9
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2007
    Messages : 340
    Par défaut
    si le alert ne s'affiche pas c'est qu'il n'y a rien dans data ou que l'exécution s'est arrété sur une erreur plus tot.

Discussions similaires

  1. [2.x] Ajax listes déroulantes liées
    Par dubitoph dans le forum Symfony
    Réponses: 33
    Dernier message: 11/02/2014, 10h56
  2. [DOM] Deuxieme liste déroulante liée via ajax, encore inclure ajax?
    Par clara1 dans le forum Général JavaScript
    Réponses: 48
    Dernier message: 16/05/2008, 15h06
  3. ajax, php et 3 listes déroulantes liées
    Par jfox dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/04/2008, 14h13
  4. Plusieurs listes déroulantes liées (ajax)
    Par sassien dans le forum Struts 2
    Réponses: 1
    Dernier message: 18/03/2008, 13h52
  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