Menu

Portée de variable

ikkiphenix
2007-01-24
2013-03-22
  • ikkiphenix

    ikkiphenix - 2007-01-24

    Bonjour,

    Mon message concerne la portion de code au chapitre 5 (Mise en oeuvre d'Ajax) du livre, page 113.

    Pour le tester, j'y ai simplement rajouté la ligne suivante :
    <p><input type="button" value="Cliquez-moi !" onclick="executerRequete();" /></p>

    Sommes-nous d'accord sur le fait qu'en l'état, le code ne fonctionne pas car la variable 'transport' créée dans executerRequete() n'est pas connue de changementEtat() ? Il faut alors "sortir" la ligne 'var transport = getXMLHttpRequest();' pour que sa portée soit globale au script, et que 'transport' ne soit plus "not defined" ?

     
    • Thierry Templier

      Bonsoir,

      Vous avez tout à fait raison, une erreur s'est glissée dans le code de cette page. Deux possibilités s'offrent à vous. La première correspond à celle que vous mentionnez, à savoir rendre la variable transport globale au script:

      <script type="text/javascript">
          var transport = getXMLHttpRequest();    <----

          function getXMLHttpRequest() {
              (...)
          }

          function changementEtat() {
              (...)
          }

          function executerRequete() {
              transport.onreadystatechange = changementEtat;
              transport.open("get", "donnees.html", true);
              transport.send(null);
          }
      </script>

      La seconde consiste à définir la fonction changementEtat en tant que fonction anonyme dans la fonction executerRequete et, dans ce cas, la variable transport est alors visible de cette fonction:

      <script type="text/javascript">
          function getXMLHttpRequest() {
              (...)
          }

          function executerRequete() {
              var transport = getXMLHttpRequest();

              transport.onreadystatechange = function() {     <----
                  (...)
              };
              transport.open("get", "donnees.html", true);
              transport.send(null);
          }
      </script>

      J'attire également votre attention que toutes les sources de l'ouvrage sont disponible en téléchargement à l'adresse suivante:
      http://sourceforge.net/project/showfiles.php?group_id=171795&package_id=196420&release_id=475192

      Merci de nous avoir remonté l'information!
      Thierry

       
    • ikkiphenix

      ikkiphenix - 2007-01-27

      Bonjour,

      Merci pour votre réponse et le lien.
      J'attaque maintenant le chapitre 7 sur dojo et ne manquerai pas de vous faire part de mes interrogations si j'en ai !

      --
      Xavier

       

Log in to post a comment.