Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ajax, ma réponse XML ne fait ... rien

    7 juillet 2011 à 23:34:11

    Bonjour :)

    Voila, dans mon code, je voudrais rafraichir une requête php par le bien de l'ajax que je métrise bien sauf pour la partie "reponse xml ".
    J'ai donc un problème, cela ne marche pas, à la fin j'ai une erreur dans ma console car la variable vaut null dans la reponse xml :'( .
    Pourriez vous m'aider, voici mon code:

    var memoryLike;
    var id_select;
    
    function addMovieLike(callback, id){
    	id_select = id;
    		 
      var xhr = getXMLHttpRequest();
     
      xhr.onreadystatechange = function() {
    	  if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
    	  callback(xhr.responseXML);
    	  }	
      };
     
      xhr.open('POST','ajax/entertainmentMovieLike.php',true);
      xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      xhr.send("idM=" + sessionID + "&idMovie=" + id);
    
    }
    
    function dataaddMovieLike(dataRequest){
    	var newLikeNew = dataRequest.getElementById('likerz').innerHTML;
    	var oldLikeOld = document.getElementById(id + "likesBoxLike").innerHTML = newLikeNew;
    	
    	
    }
    


    <?php 
    
    header("Content-Type: text/xml");
    
    
    $idM = (isset($_POST["idM"])) ? $_POST["idM"] : NULL;
    $idMovie = (isset($_POST["idMovie"])) ? $_POST["idMovie"] : NULL;
    
    try{
    	require("../connect.php");
    	
    	
    	
    	$insert_user = $bdd->prepare('INSERT INTO entertainment_movies (id_member, id_movies, datetime) VALUES (:id_member, :id_movies, NOW())');
    	$insert_user->execute(array('id_member' => $idM, 'id_movies' => $idMovie));	
    	
    	
    	$request = $bdd ->query("SELECT COUNT(*) FROM entertainment_movies WHERE id_movies = ".$idMovie."");
    	$liker = $request->fetch();
    					
    	
    	echo "<like id='likerz'>".$liker[0]." <like/>";				
      
    }
    catch (Exception $e)
    {
            die('Erreur : ' . $e->getMessage());
    }
    
    ?>
    


    Ou est mon erreur?

    Merci d'avance :)
    Cordialement
    • Partager sur Facebook
    • Partager sur Twitter
      7 juillet 2011 à 23:53:27

      Ton XML n'a pas l'air valide là... Il ne commence même pas par <?xml ...>

      http://fr.wikipedia.org/wiki/Extensible_Markup_Language
      • Partager sur Facebook
      • Partager sur Twitter
        8 juillet 2011 à 0:41:16

        bah si, grace au

        header("Content-Type: text/xml"); ça permet de dire que la page est dune page xml
        • Partager sur Facebook
        • Partager sur Twitter
          8 juillet 2011 à 5:12:26

          Et pourtant tes pages HTML tu leur mets bien un <html> en plus du content-type.

          Sinon je te conseille d'utiliser json, c'est quand meme plus pratique, plus facile a manipuler.
          • Partager sur Facebook
          • Partager sur Twitter
            8 juillet 2011 à 9:01:41

            mais sinon, le code est bon à par ça?
            • Partager sur Facebook
            • Partager sur Twitter
              8 juillet 2011 à 19:57:43

              Non. Le code doit être du XML valide pour être interprété dans responseXML.

              • Partager sur Facebook
              • Partager sur Twitter
                8 juillet 2011 à 22:52:50

                Moi alors qu'est ce que je doit rajouter pour le rendre valide?
                • Partager sur Facebook
                • Partager sur Twitter
                  9 juillet 2011 à 0:16:47

                  Je viens de lire la page wiki, bien relu le tuto sur l'ajax et l'xml, mit le echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>" qu'il manquait, mais toujours rien, j'ai une erreur: "entertainmentLike.js:23Uncaught TypeError: Cannot call method 'getElementById' of null" je ne comprend pas :'(
                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 juillet 2011 à 2:29:07

                    Ah, autre chose oui. getElementById n'existe pas en XML.

                    Tu es limité à getElementsByTagName...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      9 juillet 2011 à 10:14:09

                      J'ai essayer plein de truc rien ne marche, par contre cette fois plus d'erreur mais un "[object NodeList]" qui s'affiche au moment du clic, on doit pas etre loin :)

                      Voici donc mon code php modifier:

                      <?php 
                      
                      header("Content-Type: text/xml");
                      echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
                      
                      echo "<liking>";
                      
                      $idM = (isset($_POST["idM"])) ? $_POST["idM"] : NULL;
                      $idMovie = (isset($_POST["idMovie"])) ? $_POST["idMovie"] : NULL;
                      
                      try{
                      	require("../connect.php");
                      	
                      	
                      	
                      	$insert_user = $bdd->prepare('INSERT INTO entertainment_movies (id_member, id_movies, datetime) VALUES (:id_member, :id_movies, NOW())');
                      	$insert_user->execute(array('id_member' => $idM, 'id_movies' => $idMovie));	
                      	
                      	
                      	$request = $bdd ->query("SELECT COUNT(*) FROM entertainment_movies WHERE id_movies = ".$idMovie."");
                      	$liker = $request->fetch();
                      					
                      	//$likeName = null;
                      
                      	if($liker[0] == 1){
                      		$likesName = 'Like';
                      	}
                      	
                      	elseif($liker[0] >= 1 || $liker[0] <= 1 ){
                      		$likesName = 'Likes';
                      	}
                      	
                      	
                      	echo "<like id=\"liker\" name=\"" .$liker[0]." ".$likesName. "\" />";
                      					
                      	echo "</liking>";
                        
                      }
                      catch (Exception $e)
                      {
                              die('Erreur : ' . $e->getMessage());
                      }
                      
                      ?>
                      


                      Et voici le code Javascript de la fonction de retour:

                      function dataaddMovieLike(dataRequest){
                      	var newLikeNew = dataRequest.getElementsByTagName('like');
                      	
                      	var oldLikeOld = document.getElementById(id_select + "likesBoxLike").innerHTML = newLikeNew;
                      }
                      


                      Voila, à votre avis, où pourrez être mon erreur?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        9 juillet 2011 à 14:43:42

                        Pour ne prendre que le premier élément de la NodeList, tu fais comme pour un Array : [0]
                        • Partager sur Facebook
                        • Partager sur Twitter
                          9 juillet 2011 à 18:07:20

                          Merci, cependant maintenant j'ai "[object Element]" qui s'affiche :'(

                          Que doit je rajouté à mon code?

                          Voici le code js actuelle pour la réponse ajax:

                          function dataaddMovieLike(dataRequest){
                          	var newLikeNew = dataRequest.getElementsByTagName('like');
                          	var oldLikeOld = document.getElementById(id_select + "likesBoxLike").innerHTML = newLikeNew[0];
                          }
                          
                          • Partager sur Facebook
                          • Partager sur Twitter
                            9 juillet 2011 à 18:16:21

                            Puisque innerHTML n'existe pas non plus dans un document XML, il faut utiliser .firstChild.data ;)
                            • Partager sur Facebook
                            • Partager sur Twitter
                              9 juillet 2011 à 18:19:40

                              Voici mon code, j'ai rajouté ce que tu as dit, mais maintenant plus rien ne s'affiche :'(

                              function dataaddMovieLike(dataRequest){
                              	var newLikeNew = dataRequest.getElementsByTagName('like');
                              	var oldLikeOld = document.getElementById(id_select + "likesBoxLike").innerHTML = newLikeNew[0].firstChild.data;
                              }
                              
                              • Partager sur Facebook
                              • Partager sur Twitter
                                9 juillet 2011 à 18:27:19

                                Euh... mais attends, j'ai parlé un peu vite...

                                Tes éléments <like> n'ont pas de contenu... ?

                                <like id="liker" name="machin" />
                                


                                Tu veux afficher quoi ? o_O
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  9 juillet 2011 à 18:45:47

                                  Bah je voulais afficher le contenu de "name" de like, c'est possible?
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    9 juillet 2011 à 18:57:01

                                    Bon bah alors c'est .getAttribute('name')
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      12 juillet 2011 à 4:25:19

                                      (Si tu avais utilise du JSON tu aurais deja resolu tous tes problemes)
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        12 juillet 2011 à 8:06:07

                                        <?php 
                                        
                                        header("Content-Type: text/xml");
                                        echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
                                        
                                        echo "<liking>";
                                        
                                        $idM = (isset($_POST["idM"])) ? $_POST["idM"] : NULL;
                                        $idMovie = (isset($_POST["idMovie"])) ? $_POST["idMovie"] : NULL;
                                        
                                        try{
                                        	require("../connect.php");
                                        	
                                        	
                                        	
                                        	$insert_user = $bdd->prepare('INSERT INTO entertainment_movies (id_member, id_movies, datetime) VALUES (:id_member, :id_movies, NOW())');
                                        	$insert_user->execute(array('id_member' => $idM, 'id_movies' => $idMovie));	
                                        	
                                        	
                                        	$request = $bdd ->query("SELECT COUNT(*) FROM entertainment_movies WHERE id_movies = ".$idMovie."");
                                        	$liker = $request->fetch();
                                        					
                                        	//$likeName = null;
                                        
                                        	if($liker[0] == 1){
                                        		$likesName = 'Like';
                                        	}
                                        	
                                        	elseif($liker[0] >= 1 || $liker[0] <= 1 ){
                                        		$likesName = 'Likes';
                                        	}
                                        	
                                        	
                                        	echo "<like id=\"liker\" name=\"" .$liker[0]." ".$likesName. "\" />";
                                        					
                                        	
                                          
                                        }
                                        catch (Exception $e)
                                        {
                                                die('Erreur : ' . $e->getMessage());
                                        }
                                        echo "</liking>";
                                        ?>
                                        


                                        Non?


                                        Edit : ah mais en fait ya pas de boucles xD

                                        Donc tu reçois un truc du genre :

                                        <liking>
                                        <like id="liker" name="llll" />
                                        </liking>

                                        L'intéret? S'il n'y en a qu'un, autant renvoyer la valeur de name directement non?

                                        Et utilise firebug pour voir ton retour de la page tu gagneras du temps
                                        Ah et aussi Json, pour ce que tu fais la ce sera moins lourd et plus simple à manipuler :)
                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Ajax, ma réponse XML ne fait ... rien

                                        × 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