Partage
  • Partager sur Facebook
  • Partager sur Twitter

Un Array retourne un sur un xhr.responseText;

Sujet résolu
    23 juillet 2009 à 15:41:43

    Bonjour,

    Je me tourne vers vous car je ne trouve pas la solution...

    Voici le code :

    function gestionReponse(xhr)
    {
        if (xhr.status == 200)
        {
            $('loi_defisc').innerHTML = xhr.responseText;
        }
        else
        {
            $('loi_defisc').innerHTML = xhr.status;
        }
    }	
    	function aff_lois()
    {
        var url = 'ajax_lois.php';
        var myAjax = new Ajax.Request(
                url, 
                {
                    method: 'get', 
    				parameters: {typelois: 'test'},
                    onComplete: gestionReponse
                });
    } // fin type lois
    


    <input type="checkbox" value="A" onclick="aff_lois(); "> Loi A<br />
    <input type="checkbox" value="B" onclick="aff_lois(); "> Loi B <br />
    


    et ma page ajax_lois

    <?php
        header('Content-Type: text/html; charset: UTF-8');
    	
    echo '<pre>' . print_r($_GET['typelois']) . '</pre>';
    
    ?>
    


    Problème : J'ai un retour qui correspond à un "1" et non au "test" logiquement attendu !

    Une fois ce problème résolu, je me demande comment faire en sorte de prendre 9 ou 10 checkbox grâce à cette méthode ? Enfin, je pense pouvoir trouver une fois que le bug sera corrigé.

    Merci d'avance,
    BnK
    • Partager sur Facebook
    • Partager sur Twitter
      23 juillet 2009 à 15:47:20

      Bah c'est qu'il s'arrête au status 1 :-°
      Mets :
      $('loi_defisc').innerHTML = "status : "+xhr.status;
      

      à la place de
      $('loi_defisc').innerHTML = xhr.status;
      
      • Partager sur Facebook
      • Partager sur Twitter
        23 juillet 2009 à 16:12:48

        Cela ne change rien ... :S
        • Partager sur Facebook
        • Partager sur Twitter
          23 juillet 2009 à 16:32:20

          Ca change qu'au lieu de 1, tu as "status 1" et donc que tu sais que ton script bug au status 1.
          • Partager sur Facebook
          • Partager sur Twitter
            23 juillet 2009 à 16:49:15

            Non non, j'ai bien appliqué la ligne de code que vous m'avez donné mais cela ne change rien, même quand je test le script... j'ai toujours "1" qui est retourné
            • Partager sur Facebook
            • Partager sur Twitter
              23 juillet 2009 à 17:02:58

              Erf, c'est bon j'ai trouvé mon erreur, voici le code à modifier :

              // Ancien 
              parameters: {param: 'blablabla'},
              // Nouveau 
              parameters: 'param=blablabla',
              


              Toutefois, j'ai toujours une erreur qui doit être beaucoup plus bête (c'est pour dire), comment puis-je faire pour gérer les différents cliques ? Car j'ai 9 checkbox portant le même nom (obligatoires).


              merci Xav pour tes essais.
              • Partager sur Facebook
              • Partager sur Twitter
                23 juillet 2009 à 17:38:49

                Le voici, (présent également en post n°1


                function gestionReponse(xhr)
                {
                    if (xhr.status == 200)
                    {
                        $('loi_defisc').innerHTML = xhr.responseText;
                    }
                    else
                    {
                        $('loi_defisc').innerHTML = "status : "+xhr.status;
                    }
                }	
                	function aff_lois()
                {
                    var url = 'ajax_lois.php';
                var myAjax = new Ajax.Request(
                            url, 
                            {
                                method: 'get', 
                		parameters: 'typelois=A'
                                onComplete: gestionReponse
                            });
                } // fin type lois
                 </script>
                



                <p id="prix_en_cours">&nbsp;</p>
                 <br />
                
                <strong  style="color:#1e2688;"> Fiscalité du bien : </strong> <br />
                
                <input id="typeloi" name="typeloi" type="checkbox" value="Scellier" onclick="aff_lois(); " id="scellier"> Scellier <br />
                <input type="checkbox" value="A" onclick="aff_lois(); "> A<br />
                <input type="checkbox" value="B" onclick="aff_lois(); "> B<br />
                <input type="checkbox" value="C" onclick="aff_lois(); "> C<br />
                <input type="checkbox" value="D" onclick="aff_lois(); "> D<br /> 
                <input type="checkbox" value="E" onclick="aff_lois(); "> E<br />
                <input type="checkbox" value="F" onclick="aff_lois(); "> F<br />
                


                merci pour ton aide :)
                • Partager sur Facebook
                • Partager sur Twitter
                  23 juillet 2009 à 17:45:35

                  Bah
                  function aff_lois()
                  {
                      var url = 'ajax_lois.php';
                  var myAjax = new Ajax.Request(
                              url, 
                              {
                                  method: 'get', 
                  		parameters: 'typelois='+this.value,
                                  onComplete: gestionReponse
                              });
                  }
                  

                  Et si ça ne marche pas, tu mets this.value en argument dans les onclic et t le recupère dans la fonction.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 juillet 2009 à 17:51:08

                    c'est simple :
                    soit tu met un paramètre à ta fonction qui est une chaine de caractère contenant un moyen d'identifier la source de l'évènement;
                    soit tu laisse le navigateur envoyé l'évènement qui est activé de cette façon :
                    onclick="aff_lois(event); "; je crois que le navigateur va remplacer event par le nom exact. Si ça marche pas tu passe par javascript :
                    element.onclick = function(event)
                    {
                    };
                    

                    Et après avec cet event tu peut trouver l'objet qui a émit l'évènement, avec cross_browser ça donne ça :
                    element.onclick = function(event)
                    {
                        var element = (document.all) ? event.srcElement : event.target;
                    };
                    

                    Et une fois que tu as l'élément tu peut savoir qui il est en utilisant sa valeur:
                    element.value;
                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 juillet 2009 à 18:09:22

                      Soit quelque chose comme ceci :

                      element.onclick =  function aff_lois()
                      {
                          var url = './externe.php';
                      	var element = (document.all) ? event.srcElement : event.target;
                      	var myAjax = new Ajax.Request(
                                  url, 
                                  {
                                      method: 'get', 
                      		parameters: 'typelois='+element,
                                      onComplete: gestionReponse
                                  });
                      } // fin type lois
                       </script>
                      
                      
                      <input type="checkbox" value="A" onclick="aff_lois('A'); "> A
                      


                      Mais sans succès pour ma part... Le javascript a grande échelle, c'est pas pour demain ;o)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 juillet 2009 à 18:51:12

                        Si mon premier code ne marche pas, ne regarde pas les autres horreurs proposées.
                        Essaye ça :
                        function aff_lois()
                        {
                            var url = 'ajax_lois.php';
                        var myAjax = new Ajax.Request(
                                    url, 
                                    {
                                        method: 'get', 
                        		parameters: 'typelois='+(event.target||event.srcElement).value,
                                        onComplete: gestionReponse
                                    });
                        }
                        

                        Et réessaye le premier, j'avais ublié une virgule après le this.value.

                        BnK : Ton code, de 1 se base sur une detection de navigateur, ce qui est nul.
                        var element = (document.all) ? event.srcElement : event.target;
                        

                        var element = event.srcElement || event.target;//si srcElement existe, on le prend et sinon, on prend target
                        

                        et de 2 envois un élément HTML... et essaye de l'additionner à un chaîne...
                        Or, tu veux le value de cet élément...
                        parameters: 'typelois='+element,
                        

                        parameters: 'typelois='+element.value,
                        


                        Celui qui t'a fait faire un detection de navigateur sest déjà fait corriger sur un autre sujet et j'ose espérer que ce sera la dernière. :pirate:
                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 juillet 2009 à 19:09:21

                          J'ai bien retenté les deux méthodes mais j'ai aucun résultat, même pas ce que j'ai écris en dur dans mon fichier. Dès lors que j'enlève le "(event.target||event.srcElement).value" alosr là j'ai bien le message mais sans la variable évidemment !!

                          <script type="text/javascript" language="javascript">
                            
                          	function gestionReponse(xhr)
                          {
                              if (xhr.status == 200)
                              {
                                  $('loi_defisc').innerHTML = xhr.responseText;
                              }
                              else
                              {
                                  $('loi_defisc').innerHTML = xhr.status;
                              }
                          }	
                          function aff_lois()
                          {
                              var url = 'externe.php';
                          var myAjax = new Ajax.Request(
                                      url, 
                                      {
                                          method: 'get', 
                          				parameters: 'typelois'+(event.target||event.srcElement).value,
                                          onComplete: gestionReponse
                                      });
                          }
                          
                          
                           </script>
                          		
                          
                           
                          <input type="checkbox" value="A" onclick="aff_lois(); "> A<br />
                          <input type="checkbox" value="B" onclick="aff_lois(); "> B<br />
                          


                          An other idea ? ^^ Merci encore
                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 juillet 2009 à 19:11:26

                            @xavier : tu devrais tester ce que tu raconte avant de critiquer vraiment !
                            De 1, ton code ne marchera jamais, et de 2 je ne vois pas en quoi j'ai faux;
                            Voici un code qui marchera (j'ai pas testé mais c'est évident qu'il marche) :
                            function aff_lois(event)
                            {
                                var url = 'ajax_lois.php', myAjax = new Ajax.Request(
                                        url, 
                                        {
                                            method     : 'get', 
                            		parameters : 'typelois=' + (event.srcElement || event.target).value,
                                            onComplete : gestionReponse
                                        });
                            }
                            
                            • Partager sur Facebook
                            • Partager sur Twitter
                              23 juillet 2009 à 19:18:57

                              J'ai raison...
                              Detecte avec (document.all), c'est de la merde.
                              La preuve, même toi, tu as repris la façon avec le ||.
                              Et dans mon code, j'ai jsute oublié le = après typelois, que tu t'es bien sûr empressé d'ajouter.

                              Et j'estime avoir un niveau suffisant pour ne pas avoir à tester les codes dans ce genre.
                              Après, quand ça ne marche pas après plusieurs essais, je teste.
                              Mais la plupart du temps, c'est une fautte de frappe... facillement décelable avec un try{}catch(e){}
                              • Partager sur Facebook
                              • Partager sur Twitter
                                23 juillet 2009 à 19:29:43

                                Citation : xavierm02

                                Detecte avec (document.all), c'est de la merde.


                                Peut-être mais ça ne veut pas dire que j'ai faux, dans ce cas là dit simplement qu'il est mieux d'utiliser ta technique (c'est aussi ce que je pense et c'est pour ça que je l'ai reprise)

                                Citation : xavierm02

                                Et dans mon code, j'ai jsute oublié le = après typelois, que tu t'es bien sûr empressé d'ajouter.


                                D'une part c'est absolument pas ça que j'ai rajouté (c'est l'event en paramètre), si tu ne me crois pas regarde ton code, le '=' est présent.
                                D'autre part évidement que je vais corriger les erreurs ... :lol::lol::lol:
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  23 juillet 2009 à 19:47:34

                                  Rooh... arrêtez de vous prendre la tête deux secondes.

                                  Proposez chacun un code testé qui fonctionne, et on n'en parle plus. Notre "client" choisira le code qu'il veut. :)
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    23 juillet 2009 à 19:59:16

                                    Euhhh et autre question, dans le cas présent avez vous testés car moi cela ne donne rien de mon coté :S

                                    Aïe désolé ... et je suis preneur de toute solution =) plus on est de fou ... :)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      23 juillet 2009 à 20:22:32

                                      Ben j'ai testé le principe de la fonction (je l'ai juste modifiée pour la testée)
                                      avec de code html (code bidon juste pour les test) :
                                      <table id="tableau">
                                          <tr>
                                              <td>
                                      <pre>IMG ioquhretfjkh
                                      ik jeh 
                                      lqhbgsekgyudhwof
                                      ihdfbbviwkdfrvgow
                                      ukyfg,jghfuklyfglkuy
                                      uoyfgkjyhgkliuètgpm
                                      ukyfgoguigpmlpo_impy_
                                      po_uièglètoulouè_yp
                                      </pre>
                                              </td>
                                              <td rowspan="2">
                                      <pre>ARTICLE hebgsfjg;
                                      hbsre
                                      rlighljrdglsbhnr
                                      ltbgnlisutrhdugh
                                      slkujrheg$
                                      osuiyghkjhlihsie
                                      ughpsirokomgqpo
                                      siejf^ù
                                      iorduhgluihqsupr
                                      mgoàihq^ùreg
                                      			</pre>
                                              </td>
                                          </tr>
                                          <tr>
                                              <td>
                                      <pre>COMMENT qjkrhsbg
                                      lqbhmrhgmrqhlk
                                      gn:jblgq
                                      lkqhrjgqhlgoqu
                                      irhpgq
                                      			</pre>
                                              </td>
                                          </tr>
                                      </table>
                                      

                                      Et ce code javascript :
                                      document.getElementById('tableau').getElementsByTagName('tr')[0].getElementsByTagName('td')[1].onclick = function(event)
                                      	{
                                      		(event.srcElement || event.target).innerHTML = "blablabla.:boomer:.blablabla";
                                      	};
                                      

                                      Ca marche très bien. Donc le problème vient soit que tu as mal adapté la fonction a ton code, soit il y a un problème avec la class Ajax.Request ;)
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        23 juillet 2009 à 21:14:35

                                        Jusque là, j'avais remarqué et c'était ma question initiale... Comment corriger mon erreur ?

                                        :)
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          23 juillet 2009 à 21:35:57

                                          Montre ton code actuel.
                                          Sinon,
                                          function aff_lois(lettre)
                                          {
                                              var url = 'ajax_lois.php';
                                          var myAjax = new Ajax.Request(
                                                      url, 
                                                      {
                                                          method: 'get', 
                                          		parameters: 'typelois='+lettre,
                                                          onComplete: gestionReponse
                                                      });
                                          } // fin type lois
                                          

                                          et
                                          <input type="checkbox" value="A" onclick="aff_lois(); "> A<br />
                                          <input type="checkbox" value="B" onclick="aff_lois(this.value); "> B<br />
                                          <input type="checkbox" value="C" onclick="aff_lois(this.value); "> C<br />
                                          <input type="checkbox" value="D" onclick="aff_lois(this.value); "> D<br /> 
                                          <input type="checkbox" value="E" onclick="aff_lois(this.value); "> E<br />
                                          <input type="checkbox" value="F" onclick="aff_lois(this.value); "> F<br />
                                          
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            23 juillet 2009 à 21:51:08

                                            Merci Xavier,

                                            D'après toi, est-ce possible de gérer le "Dé"checkage d'une case ? Peux-tu m'orienter stp ?

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              23 juillet 2009 à 22:22:51

                                              Bah
                                              checkbox.checked="checked";//pour check
                                              checkbox.checked="";//pour décheck
                                              
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                23 juillet 2009 à 22:25:02

                                                sinon il y a une autre solution toute simple :
                                                (J'utilise ici celle-la car elle permet de gérer le checkage, mais c'est pareil)
                                                <input type="checkbox" value="A" onclick="aff_lois(this); "> A<br />
                                                

                                                function aff_lois(elmt)
                                                {
                                                    var url = 'ajax_lois.php?ckecked=' + elmt.checked;
                                                    var myAjax = new Ajax.Request(
                                                            url, 
                                                            {
                                                                method: 'get', 
                                                		parameters: 'typelois=' + elmt.value,
                                                                onComplete: gestionReponse
                                                            });
                                                } // fin type lois
                                                

                                                Je ne sais pas comment tu veut gérer ça, par exemple ici j'envoi la valeur à la page php avec l'url et GET.
                                                elmt.checked est un simple booléen qui vaut true quand c'est ckecker et sinon...

                                                EDIT : bien sur on a répondu avant moi :'(

                                                PS : @xavier : checked est bien un booléen ! même si une chaine de caractère vaut true... (enfin ça marche quand même en gros)
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  23 juillet 2009 à 23:12:05

                                                  Quelque chose comme ça donc si j'en conclus vos posts ?

                                                  if(checkbox.checked =="checked") {
                                                  var myAjax = new Ajax.Request(
                                                              url, 
                                                              {
                                                                  method: 'get', 
                                                  		parameters: 'typelois='+loi+'&mode=1',
                                                                  onComplete: gestionReponse
                                                              });
                                                  	
                                                  	} else { 
                                                  var myAjax = new Ajax.Request(
                                                              url, 
                                                              {
                                                                  method: 'get', 
                                                  		parameters: 'typelois='+loi+'&mode=2',
                                                                  onComplete: gestionReponse
                                                              });
                                                  			} // 
                                                  
                                                  }
                                                   </script>
                                                  

                                                  Pour info, ce dernier ne fonctionne pas. Je pense que cela vient de la condition non réalisée. On appel peut être pas de cette manière le "checkbox.checked"


                                                  PS : Avec cette méthode, je ne peux pas afficher une liste type : "A, B, C, D" et quand je reclique sur "D" je supprime ce dernier de ma liste dans l'affichage si ? Ou alors je vois pas comment
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    24 juillet 2009 à 0:35:14

                                                    Citation : xavierm02


                                                    checkbox.checked="checked";//pour check
                                                    checkbox.checked="";//pour décheck
                                                    


                                                    ... ... ... >_<

                                                    checkbox.checked=true;
                                                    checkbox.checked=false;
                                                    

                                                    :-°
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      24 juillet 2009 à 8:29:44

                                                      Osef... c'est pareil... :-°
                                                      javascript:alert(((!!"checked")===true) && ((!!"")===false));
                                                      
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        24 juillet 2009 à 8:55:35

                                                        Bnk : j'ai l'impression que tu n'as pas bien compris quelque chose : quand tu fait checkbox.checked, ça marche uniquement si la variable checkbox désigne l'élément html !
                                                        Donc en reprenant ce que tu as fait, ça donne ceci :
                                                        function aff_lois(checkbox)
                                                        {
                                                        if(checkbox.checked) {
                                                        var myAjax = new Ajax.Request(
                                                                    url, 
                                                                    {
                                                                        method: 'get', 
                                                        		parameters: 'typelois='+checkbox.value+'&mode=1',
                                                                        onComplete: gestionReponse
                                                                    });
                                                        	
                                                        	} else { 
                                                        var myAjax = new Ajax.Request(
                                                                    url, 
                                                                    {
                                                                        method: 'get', 
                                                        		parameters: 'typelois='+checkbox.value+'&mode=2',
                                                                        onComplete: gestionReponse
                                                                    });
                                                        			} // 
                                                        
                                                        }
                                                        }
                                                        

                                                        Donc ici la variable checkbox est un paramètre ! Donc pour que ça marche, dans le HTML, il faut lui passer un élément en paramètre pour que ça marche, on peut faire simplement comme ceci :
                                                        <input type="checkbox" value="A" onclick="aff_lois(this); "> A<br />
                                                        
                                                        Comme ça l'élément envoyé est l'élément qui produit l'évènement, représenté par this.

                                                        Mais du coup on ne peut plus passer la lettre directement en paramètre, mais ce n'est pas grave étant donné qu'on a l'élément en question, il reste juste a faire : element.value (ici element s'appelle checkbox) ;)
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          24 juillet 2009 à 9:02:10

                                                          Wao un code sans fautes o_O
                                                          Tu t'amélioré :p
                                                          Juste pour la forme, je vais te signaler que tu as mis un commentaire vide et que c'est pas bien indenté :-°
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter

                                                          Un Array retourne un sur un xhr.responseText;

                                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                          • Editeur
                                                          • Markdown