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] 3 listes attachées ! ID non accessible !


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Par défaut [AJAX] 3 listes attachées ! ID non accessible !
    Bonjour,


    je me lance doucement dans l'ajax, et je commence a prendre consciences de sa puissance, par contre je bloque sur une 3 listes chainées entre elles ...

    lorsque ma seconde est remplie l'id du select semble inaccessible, et donc j'ai un probleme d'acces a l'objet de la seconde liste générée par ajax,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sel = document.getElementById('modele');
    idmodele = sel.options[sel.selectedIndex].value;
    la j'ai un message d'erreur sel.options a la valeur nul ou n'est pas un objet,

    lorsque j'affiche le code source je n'appercois pas la liste générée en ajax ! donc je n'arrive pas a débugger...



    edit :
    voyez vous meme ...
    http://www.jantes-alu.com/tst/index.php





    voici mon code :


    Javascript
    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
     
     
    <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('modele').innerHTML = leselect;
    					}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","scripts/agax_listerecherchemodele.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 
    				sel = document.getElementById('marque');
    				idmarque = sel.options[sel.selectedIndex].value;
     
     
     
    				xhr.send("idMarque="+idmarque);
     
    			}
     
    			function gotst(){
    				alert("tst");
    				sel = document.getElementById('modele');
    				idmodele = sel.options[sel.selectedIndex].value;
    				}
     
    			function go_type(){
    				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('type').innerHTML = leselect;
    					}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","scripts/agax_listerecherchetype.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 
    				sel = document.getElementById('modele');
    				idmodele = sel.options[sel.selectedIndex].value;
     
     
     
    				xhr.send("idModele="+idmodele);
     
     
    			}			
    		</script>
    Mes listes
    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
     
     
    		<?
    			//$req="select * from voiture_marque where visible = 1 order by id ASC";
    			//$req="SELECT DISTINCT MARQUE, ID FROM `database` GROUP BY MARQUE ";
     
    			$req="SELECT DISTINCT MARQUE  FROM `database` WHERE 1";
    			$bdd->setQuery($req);
    			$rescar = $bdd->executeQuery();
    		?>
            <select name="marque"  title="Constructeurs automobiles" class="rechercheliste"  onchange="go();">
              <option value="-1" selected="selected">Marque</option>
              <?
     	 for($i=0;$i<sizeof($rescar);$i++){
    		if($rescar[$i][0]!=""){
    		 ?>
              <option  value="<? echo $rescar[$i][0]; ?>" ><? echo stripslashes(nl2br($rescar[$i][0])); ?></option>
              <?
    			}
    		}  
    			?>
              </select>
     
     
    	    <div id='modele' style='display:inline'>
    	      <select name="modele" id="modele" title="Modeles automobiles"  class="rechercheliste">
    	        <option value='-1'>Modèle</option>
    	      </select>
    	      </div>
     
    	    <div id='type' style='display:inline'>
    	      <select name="type" id="type" title="Type automobiles"  class="rechercheliste" >
    	        <option value='-1'>Type</option> 
    	        </select>
    	      </div>
    agax_listerecherchemodele.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
     
    <?php
     
    include ("../tpl/ho.php");
    //connexion
     
            echo "<select name='modele' id='modele' class='rechercheliste' OnChange='gotst()'>";
     
    if(isset($_POST["idMarque"])){
            
            $idmarque=$_POST["idMarque"];   
    //      $idmarque=6;
            //$req="select * from voiture_modele where IDMARQUE = ".$idmarque." and visible = 1 order by id ASC";
            $req="SELECT DISTINCT MODELE FROM `database` WHERE MARQUE = '$idmarque' ";
            $bdd->setQuery($req);
            $res = $bdd->executeQuery();
     
     
            for($i=0;$i<sizeof($res);$i++){
                            echo "<option value='".stripslashes($res[$i][0])."'>".stripslashes($res[$i][0])."</option>";
                    }
    }else{
            echo "<option value='-1'>Modèle</option>";
            }
            echo "</select>";
     
    ?>

    agax_listerecherchetype.php
    (la requette n'est pas a jour mais de tte facon l'ajax n'ajax pas !)

    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
     
    <?php
     
    include ("../tpl/ho.php");
     
            
            
    if(isset($_POST["idModele"])){
            
            $idmodele=$_POST["idModele"];   
    //      $idmarque=6;
            //$req="select * from voiture_modele where IDMARQUE = ".$idmarque." and visible = 1 order by id ASC";
            
            $req="SELECT DISTINCT MODELE FROM `database` ";
            $bdd->setQuery($req);
            $res = $bdd->executeQuery();
     
     
            echo "<select name='type' id='type' class='rechercheliste'>";
            
            for($i=0;$i<sizeof($res);$i++){
                            echo "<option value='".$res[$i][0]."'>".stripslashes($res[$i][0])."</option>";
                    }
            
            echo "</select>";
            
            }
    ?>

    J'ai une erreur sel.option a la valeur null ou n'est pas un objet
    et lorsque j'affiche la source forcément ma liste n'apparait pas .... donc je ne peux pas débugger ...

  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,
    la toute première correction consiste à virer les ID dupliqués :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     <div id='modele' style='display:inline'>
    <select name="modele" id="modele" title="Modeles automobiles"  class="rechercheliste">
    Il y en a peut-être ailleurs : pas regardé.

    Ensuite (et ensuite seulement), tout cela fait-il partie d'un <form> ?
    La modif des objets via innerHTML n'est envisageable qu'en dehors d'un formulaire. Dans le cas contraire, tu seras obligé de passer par les syntaxes DOM de création d'objets (préférable de toutes façons, d'ailleurs).

    A+

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Par défaut
    syntaxe DOM de création ?

    aurais tu un liens sur un bon tuto de débutant pour que je lise et comprenne un peu tout cela ?

    Merci pour ta premiere réponse.

  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 mims1664 Voir le message
    syntaxe DOM de création ?

    aurais tu un liens sur un bon tuto de débutant pour que je lise et comprenne un peu tout cela ?
    Comme la plupart du temps : la FAQ

    A+

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Par défaut
    Oui j'ai deja lu la FAQ, j'ai bien compris que le DOM était un un standard formattage de donnée.

    La question que je me pose est dans mon cas, mes données sont dans ma base de donnée donc non sous forme DOM, pourqoi devrais je convertir ces donnée sous le format DOM, pour ensuite l'attaquer au meme titre qu'actuellement ?

    Il y a vraiment un truc que je comprends pas c'est l'intéret dans mon cas (AJAX 3 listes chainées et pas mal de donnée) tout cela pour afficher des donnée que de ttoute facon j'exploite a partir de ma base de donnée ?

  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
    Pas de lien entre DOM et BDD.

    Ajax te permet de récupérer les données dans la BDD.
    Le DOM te servira à les intégrer correctement dans ta page.

    A+

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/03/2011, 09h59
  2. Constructeur non accessible
    Par mathieu dans le forum C++
    Réponses: 1
    Dernier message: 03/09/2006, 23h43
  3. [AJAX] Création obj/form non accessibles
    Par speedev dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 04/07/2006, 11h27
  4. Constructeur non accessible
    Par mathieu dans le forum C++
    Réponses: 12
    Dernier message: 06/08/2004, 01h56

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