Partage
  • Partager sur Facebook
  • Partager sur Twitter

[AJAX] problème avec le retour de PHP

Sujet résolu
    12 avril 2009 à 9:40:36

    Bonjour tout le monde,

    J'ai récupéré un exemple d'AJAX utilisant XML sur internet afin d'essayer de comprendre l'approche XML d'ajax (je n'ai utilisé que du texte jusque maintenant).

    J'ai donc ce code HTML :

    <html>
    <head>
    <script src="xml.js"></script>
    </head>
    <body>
    
    <form> 
    	Select a User:
    	<select name="users" onchange="showUser(this.value)">
    		<option value="1">Peter Griffin</option>
    		<option value="2">Lois Griffin</option>
    		<option value="3">Glenn Quagmire</option>
    		<option value="4">Joseph Swanson</option>
    	</select>
    </form>
    
    <h2><span id="firstname"></span>
    &nbsp;<span id="lastname"></span></h2>
    <span id="job"></span>
    <div style="text-align: right">
    <span id="age_text"></span>
    <span id="age"></span>
    <span id="hometown_text"></span>
    <span id="hometown"></span>
    </div>
    
    </body>
    </html>
    


    ce code Javascript :

    var xmlHttp;
    
    function showUser(str)
     { 
     	 //alert(str);
    	 xmlHttp=GetXmlHttpObject();
    	 if (xmlHttp==null)
    	  {
    		  alert ("Browser does not support HTTP Request");
    		  return;
    	  } 
    	 var url="responsexml.php";
    	 url=url+"?q="+str;
    	 url=url+"&sid="+Math.random();
    	 xmlHttp.onreadystatechange=stateChanged;
    	 xmlHttp.open("GET",url,true);
    	 xmlHttp.send(null);
     }
    
    function stateChanged() 
    { 
    	//alert(xmlHttp.readyState);
    	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
    	{
    		 xmlDoc=xmlHttp.responseXML;
    		 document.getElementById("firstname").innerHTML=
    		 xmlDoc.getElementsByTagName("firstname")[0].childNodes[0].nodeValue;
    		 document.getElementById("lastname").innerHTML=
    		 xmlDoc.getElementsByTagName("lastname")[0].childNodes[0].nodeValue;
    		 document.getElementById("job").innerHTML=
    		 xmlDoc.getElementsByTagName("job")[0].childNodes[0].nodeValue;
    		 document.getElementById("age_text").innerHTML="Age: ";
    		 document.getElementById("age").innerHTML=
    		 xmlDoc.getElementsByTagName("age")[0].childNodes[0].nodeValue;
    		 document.getElementById("hometown_text").innerHTML="<br/>From: ";
    		 document.getElementById("hometown").innerHTML=
    		 xmlDoc.getElementsByTagName("hometown")[0].childNodes[0].nodeValue;
    	 }
    } 
    
    function GetXmlHttpObject()
     { 
    	 var objXMLHttp=null;
    	 if (window.XMLHttpRequest)
    	  {
    		  objXMLHttp=new XMLHttpRequest();
    	  }
    	 else if (window.ActiveXObject)
    	  {
    		  objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
    	  }
    	 return objXMLHttp;
     }
    


    Le fichier s'appelle xml.js

    et le fichier php :

    <?php
    header('Content-Type: text/xml');
    header("Cache-Control: no-cache, must-revalidate");
    //A date in the past
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    
    $q=$_GET["q"];
    
    $con = mysql_connect('localhost', 'root', 'mdp');
    if (!$con)
     {
    	 die('Could not connect: ' . mysql_error());
     }
    
    mysql_select_db("ajax_demo", $con);
    
    $sql="SELECT * FROM user WHERE id = ".$q."";
    
    $result = mysql_query($sql);
    
    echo '<?xml version="1.0" encoding="ISO-8859-1"?>
    <person>';
    while($row = mysql_fetch_array($result))
     {
    	 echo "<firstname>" . $row['FirstName'] . "</firstname>";
    	 echo "<lastname>" . $row['LastName'] . "</lastname>";
    	 echo "<age>" . $row['Age'] . "</age>";
    	 echo "<hometown>" . $row['Hometown'] . "</hometown>";
    	 echo "<job>" . $row['Job'] . "</job>";
     }
    echo "</person>";
    
    mysql_close($con);
    ?>
    

    J'ai bien sûr créer la table, j'y ai mis les données, les accès...

    J'obtiens ce message lors de l'exécution de mon programme :

    Citation : FF3

    xmlDoc.getElementsByTagName("firstname")[0] is undefined
    [Break on this error] xmlDoc.getElementsByTagName("firstname")[0].childNodes[0].nodeValue;
    xml.js (ligne 27)



    Voici la ligne 27 :


    xmlDoc.getElementsByTagName("firstname")[0].childNodes[0].nodeValue;
    


    Voici l'URL du programme :

    <lien url="http://www.w3schools.com/php/php_ajax_responsexml.asp"]http://www.w3schools.com/php/php_ajax_responsexml.asp">le lien du site qui me permet d'apprendre l'ajax avec XML</lien>

    Je vous remercie d'avance pour votre aide.

    beegees
    • Partager sur Facebook
    • Partager sur Twitter
      12 avril 2009 à 10:10:00

      Je viens de test et ça fonctionne, je pense qu'il y a une/des erreurs sur ton fichier générant le xml (essaie de l'afficher directement, genre: responsexml.php?q=1)
      • Partager sur Facebook
      • Partager sur Twitter
      Erreur PDO - Installation Wamp - Docs PHP et MYSQL.
        12 avril 2009 à 10:26:26

        Salut B-Dav,

        Merci d'avoir pris le temps d'essayer le code et de m'avoir répondu.

        Chez moi, ça ne fonctionn pas.

        Est-ce normal que quand j'écris ce code :

        alert(xmlDoc);
        


        J'obtiens toujours comme réponse:

        Citation : FF3

        [object XMLDocument]

        ?

        Citation : B-Dav

        (essaie de l'afficher directement, genre: responsexml.php?q=1)



        Je dois écrire ce code dans javascript ? de cette façon ? :

        if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
        	{
        		 //réponse de PHP en xml
        		 xmlDoc=xmlHttp.responseXML;
        		 //alert(xmlDoc);
        		 alert(responsexml.php?q=1);
        


        J'obtiens ce résultat :

        Citation : firebug

        Firebug a atteint sa limite d'enregistrements. %S entrées ne sont pas montrées. Préférences
        missing : in conditional expression
        [Break on this error] alert(responsexml.php?q=1);\n



        Qu'en penses-tu ?

        Encore merci pour ton aide.

        beegees

        • Partager sur Facebook
        • Partager sur Twitter
          12 avril 2009 à 10:34:46

          Quand je disait d'afficher directement le xml, c'est dans ton navigateur, genre:
          http://localhost/dossier_ton_site/responsexml.php?q=1

          Pour voir si tu n'as pas une/des erreur(s) xml
          • Partager sur Facebook
          • Partager sur Twitter
          Erreur PDO - Installation Wamp - Docs PHP et MYSQL.
            12 avril 2009 à 10:36:58

            Re,

            Merci pour ta réponse rapide et efficace.

            Voici ce que j'obtiens :

            Citation : Firefox3


            Erreur d'analyse XML : mal formé
            Emplacement : http://localhost/EICE/AJAX/XML/responsexml.php?q=1
            Numéro de ligne 1, Colonne 6 :array(1) {
            -----^



            Qu'en penses-tu ?

            Merci encore.

            beegees
            • Partager sur Facebook
            • Partager sur Twitter
              12 avril 2009 à 10:42:15

              Donc c'est bien une erreur xml, alors on va voir c'est quoi le probleme en mettant les header() en commentaire: et en ajoutant un or die() sur ta requête:
              <?php
              // header('Content-Type: text/xml');
              // header("Cache-Control: no-cache, must-revalidate");
              //A date in the past
              // header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
              
              $q=$_GET["q"];
              
              $con = mysql_connect('localhost', 'root', 'mdp');
              if (!$con)
               {
              	 die('Could not connect: ' . mysql_error());
               }
              
              mysql_select_db("ajax_demo", $con);
              
              $sql="SELECT * FROM user WHERE id = ".$q."";
              
              $result = mysql_query($sql) or die(mysql_error());
              
              echo '<?xml version="1.0" encoding="ISO-8859-1"?>
              <person>';
              while($row = mysql_fetch_array($result))
               {
              	 echo "<firstname>" . $row['FirstName'] . "</firstname>";
              	 echo "<lastname>" . $row['LastName'] . "</lastname>";
              	 echo "<age>" . $row['Age'] . "</age>";
              	 echo "<hometown>" . $row['Hometown'] . "</hometown>";
              	 echo "<job>" . $row['Job'] . "</job>";
               }
              echo "</person>";
              
              mysql_close($con);
              ?>
              

              Et réaffiche ta page: http://localhost/EICE/AJAX/XML/responsexml.php?q=1 et corrige en fonction...
              • Partager sur Facebook
              • Partager sur Twitter
              Erreur PDO - Installation Wamp - Docs PHP et MYSQL.
                12 avril 2009 à 10:50:31

                Re,

                Un super grand merci pour ton aide.

                J'avais en fait oublié de changer le nom de la base de données :-°

                Désolé !!!!

                Mon problème m'a permis d'apprendre comment débuguer avec XML et ce, grâce à toi, merci.

                Est-ce que les header sont indispensables ? ils servent à quoi ?

                à quoi sert ce header ? :

                header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
                


                Encore un super grand merci pour ton dévouement et ton efficacité.

                beegees
                • Partager sur Facebook
                • Partager sur Twitter
                  12 avril 2009 à 10:54:08

                  De rien...

                  header('Content-Type: text/xml'); Pour dire au navigateur que c'est un xml
                  et les 2 autres header() pour dire de ne pas mettre en cache le xml

                  (j'ai raccourci l'explication, mais en gros c'est ça)
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Erreur PDO - Installation Wamp - Docs PHP et MYSQL.
                    12 avril 2009 à 10:55:37

                    Merci beaucoup et bon Week-End Pascal.

                    beegees
                    • Partager sur Facebook
                    • Partager sur Twitter

                    [AJAX] problème avec le retour de PHP

                    × 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