Pb Ajax-PhP

Résolu
Zakki49 Messages postés 71 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 18 mai 2011 - 3 mars 2009 à 16:18
Zakki49 Messages postés 71 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 18 mai 2011 - 4 mars 2009 à 10:10
Bonjour à tous,

Alors il se trouve que j'ai un petit souci.
J'ai deux liste déroulante la première chargé au démarrage de ma page, et la deuxième qui se charge selon le choix de la première.

pour la deuxième j'ai donc une balise
avec un id, qui récupéré la réponse de ma page qui génère ma deuxième liste déroulante.
Jusqu'ici rien de bien sorcier cela fonctionne correctement.
Cependant, ces deux listes sont dans un formulaire, pour un enregistrement en base.

Et c'est là que mon problème se pose, je n'arrive pas à récupérer la valeur de ma deuxième liste déroulante (celle créer dynamiquement dans ma réponse ajax).

Si quelqu'un pouvait me donner un conseil, ou m'aiguiller.

P.S: dites moi si je dois montre mon code :)

7 réponses

Zakki49 Messages postés 71 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 18 mai 2011
4 mars 2009 à 10:10
Bon bah j'ai trouvé ^^

En faite dans mon code qui génère mon <select>, j'avais oublier les points de concatenation pour Get_ID()

Du coup ca me renvoyai mes parenthèse.
C'etait tout con.
Je te remercie quand même de ton aide Kohntark.
3
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
3 mars 2009 à 16:26
Salut,

Réponse : montre le code :)

... parce que sinon ça risque d'être dur dur.

Kohntark -
0
Zakki49 Messages postés 71 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 18 mai 2011
3 mars 2009 à 16:30
Alors pour les selects :

Premiere
<hr size="2" width="100%" />
<select name="famille" style="width:200px" onchange="AfficheSSFamille()" id="famille">                  
                       <option value"0">Choisissez une famille</option>
                           <?php
                               $o_Array = new ArrayList();
                               $o_Srv_Famille = new Srv_Famille();
                               $o_Famille = new Object_Famille();
                              
                               $o_Array = $o_Srv_Famille->Get_AllFamille();
                               $nb_element = $o_Array->size();
                               if($nb_element>0)
                               {
                                   for($i=0;$i<$nb_element;$i++)
                                   {
                                       $o_Famille = $o_Array->get($i);
                                       echo("<option value=".$o_Famille->get_ID().">".$o_Famille->get_Libelle()."</option>");
                                   }
                               }
                           ?>
                   </select>
<hr size="2" width="100%" />deuxième juste la div :

                  
              

<hr size="2" width="100%" />La fonction js :

function AfficheSSFamille()
{
    var o_liste    =  document.getElementById("famille");
    var index = o_liste.selectedIndex;    
    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", "Charge_DDLssFamille.php", true);
        
       xhr_object.onreadystatechange = function() {
          if(xhr_object.readyState == 4)
             document.getElementById("ss_famille").innerHTML = xhr_object.responseText;
       }

<hr size="2" width="100%" />Et le code pour générer la deuxième liste déroulante.

<?php
include("Class/Srv_SS_Famille.php");
include("Class/Parametres.php");
    $cs_echo = "";   
    $Srv_SS_Famille = new Srv_SS_Famille();
    $o_SS_Famille = new Object_SSFamille();
    if($_POST["type"] != 0)
    {
        @mysql_connect(parametres::GetHost(),parametres::GetUser(),parametres::GetPass()) or die("Connexion avec le serveur a échouée");       
        @mysql_selectdb(parametres::GetBDD()) or die ("Connexion avec la base de données a  échouée");                $result @mysql_query("SELECT * FROM ss_famille WHERE N_ID_FAMILLE".$_POST["type"]."");       
        $cs_echo .= "
                                            ----

                                                            Sous-famille :
                           ,                        
                                    <select style=\"width:200px\" name=\"ss_famille\" />
            <option value=\"0\">Choisissez une sous-famille</option>
        ";               
        while($disp = mysql_fetch_array($result))
        {           
            $o_SS_Famille = $Srv_SS_Famille->Transform_Record_To_SSFamille($disp);
            $cs_echo .= "<option value=\"$o_SS_Famille->Get_ID()\">".$o_SS_Famille->Get_libelle()."</option>
                                ";
        }
       
        $cs_echo .= "</select>,
       
       
";
    }      
        echo($cs_echo);
?>
     
       xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
       var data = "type="+escape(o_liste.options[index].value);
       xhr_object.send(data);
}

<hr size="2" width="100%" />Voila en espérant que quelqu'un trouve, je me casse la tête depuis un bon moment déjà
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
3 mars 2009 à 17:16
Lecture rapide ....

<option value"0">
= >
<option value="0">

<select style="width:200px" name="ss_famille" />
=>
<select style="width:200px" name="ss_famille">

Pour le debug tu devrais contrôler que la valeur des options est correcte, qu'il n'y a pas de bizarreries dans le code retourné, par exemple en affichant le code brut dans un div "debug", et faire un print_r($_POST); dans la page cible du formulaire.
On ne voit pas ici tes balises <form></form>, sont elles correctement positionnées ?
Pense également à gérer le code de réponse de la requête ajax (if(xhr.status  == 200), else patati ...)

Bon courage,

Kohntark -
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Zakki49 Messages postés 71 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 18 mai 2011
3 mars 2009 à 17:23
oui tout est bien positionné :(
merci quand même pour les quelques corrections, je n'y avait pas fait attention ^^

Autrement j'ai lu que certain construisait via une boucle js le soptions un à un dans le retour.
Mais bon ca va se corser.

Bon je vais essayé de voir, merci quand même
0
Zakki49 Messages postés 71 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 18 mai 2011
3 mars 2009 à 17:28
Ceci dit en y pensant, est ce possible que je ne récupère pas la valeur de mon select parceque celui est créer dans un fichier a part?
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
3 mars 2009 à 18:43
Autrement j'ai lu que certain construisait via une boucle js le soptions un à un dans le retour.
Mais bon ca va se corser.

Utiliser le DOM sera effectivement plus complexe qu'un simple innerHTML. Ca peut paraitre plus lourd, mais ça restera plus simple à gérer si tu fais dans le complexe (c'est clair, non ? )
Dans ton cas innerHTML doit fonctionner et je pense qu'il faut persévérer.

Que donnent les idées de debug que j'ai apportées dans mon dernier message ? des erreurs ? des choses pas claires ?

Ceci dit en y pensant, est ce possible que je ne récupère pas la valeur
de mon select parceque celui est créer dans un fichier a part?
Peu importe la source de création si il apparait correctement dans le code de ta page (via le innerHTML), ou plus exactement si le code renvoyé est correct (ce n'est pas parce que tu vois la liste déroulante dans ta page que tout va bien)

Je le redis encore, il est important que tu testes les quelques pistes que je te soumettais pour le debug.
Pense aussi à valider ton code sur le validateur W3C, ça peut permettre de déceler qq erreurs. Qq fois un simple oubli de quote mène au desastre.

Kohntark -
0
Rejoignez-nous