Partage
  • Partager sur Facebook
  • Partager sur Twitter

Js : Erreur d'analyse...

Sujet résolu
    7 juillet 2009 à 22:50:56

    Bonjour,

    Lors de l'execution de mon code, en l'échange du fonctionnement normal, le code ne marche pas et la conjsole me renvoie :
    Erreur d'analyse pour la valeur de la propriété "height". Déclaration abandonnée.


    Le problème, c'est que lors de l'utilisation de ceux-ci, je mets bien +'px'; juste apres...... Quels sont les possibilités d'erreur pour ce message ?
    Merci d'avance.

    EDIT:

    Le code quand meme !
    function readData(data)
    {
    	if(!data)
    		alert('Merrrddeee');	
    	var liste = data.getElementsByTagName("liste");
    	for(var i =0, c = liste.length; i<c; i++)
    	{
    		
    		var item = liste[i].getElementsByTagName("item");
    		for(var j = 0, d=item.length; j<d;j++)
    		{
    			var titre = item[0].getAttribute("name");
    			var contenu = item[1].getAttribute("name");
    			var left = item[2].getAttribute("name");
    			var top = item[3].getAttribute("name");
    			var width = item[4].getAttribute("name");
    			var height = item[5].getAttribute("name");
    			var type = item[6].getAttribute("name");
    			creer_fenetre(left,top,width,height,titre,contenu,type);
    		}
    	}
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      7 juillet 2009 à 23:30:47

      Euh ? C'est la bonne partie de code ?
      • Partager sur Facebook
      • Partager sur Twitter
        7 juillet 2009 à 23:31:47

        Oui c'est vrai qu'on ne comprends pas grand chose, d'un coté tu nous parle d'un +'px'
        après d'un fichier .php
        et on se retrouve avec un .js seulement ^^
        • Partager sur Facebook
        • Partager sur Twitter
          7 juillet 2009 à 23:33:06

          Hum, eh bien, c'est la page indiquée. La partie qui traite par contre, c'est :

          fenetre.style.left=left+"px"; //Modification de l'attribut left du style de notre div
                  fenetre.style.top=top+"px";
                  fenetre.style.width=width+"px";
                  fenetre.style.height=height+"px";
          


          C'est à n'y rien comprendre... :(

          EDIT:
          Si je recapitule :

          Une page essai .php qui appelle grace à Ajax une page php. Cette page php produit un code xml et le renvoie à essai.php, à la fonction readData qui est celle précisé au dessus.
          • Partager sur Facebook
          • Partager sur Twitter
            7 juillet 2009 à 23:35:18

            Ta vérifier que ta variable height contient bien un int par exemple
            • Partager sur Facebook
            • Partager sur Twitter
              7 juillet 2009 à 23:36:58

              Un chiffre ? Oui, height contient bien un chiffre. :)
              • Partager sur Facebook
              • Partager sur Twitter
                7 juillet 2009 à 23:40:35

                Le truc c'est que tu sors ton height par
                var height = item[5].getAttribute("name");
                et on ne sait pas trop à quoi ça correspond.

                En fait ce qui serait bien dans un premier temps c'est de connaître ce que contient la variable data passée en paramètre
                • Partager sur Facebook
                • Partager sur Twitter
                  7 juillet 2009 à 23:49:33

                  En recpitulant depuis le debut :

                  Voici la page essai.php (enfin, ce qui nous interesse) :
                  function positionFenetre() {
                  
                          var xhr = getXMLHttpRequest();
                          
                          xhr.onreadystatechange = function() {
                                  if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
                                          readData(xhr.responseXML);
                                  }
                          };
                          
                          xhr.open("GET", "fenetre_position.php", true);
                          xhr.send(null);
                  }
                  function readData(data)
                  {
                  	if(!data)
                  		alert('Merrrddeee');	
                  	var liste = data.getElementsByTagName("liste");
                  	for(var i =0, c = liste.length; i<c; i++)
                  	{
                  		
                  		var item = liste[i].getElementsByTagName("item");
                  		for(var j = 0, d=item.length; j<d;j++)
                  		{
                  			var titre = item[0].getAttribute("name");
                  			var contenu = item[1].getAttribute("name");
                  			var left = parseInt(item[2].getAttribute("name"));
                  			var top = parseInt(item[3].getAttribute("name"));
                  			var width = parseInt(item[4].getAttribute("name"));
                  			var height = parseInt(item[5].getAttribute("name"));
                  			var type = item[6].getAttribute("name");
                  			creer_fenetre(left,top,width,height,titre,contenu,type);
                  		}
                  	}
                  }
                  


                  La fonction position fenetre, appelle alors la page fenetre_position.php qui est celle-ci :

                  <?php
                  
                  header("Content-Type: text/xml");
                  echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
                  echo"<racine>";
                  for($i = 1; $i < 10; $i++)
                  {
                  	
                  	$fichier = fopen("fichier-".$i.".txt","r+");
                  	$verification = fgets($fichier);
                  	if($verification == "")
                  	{
                  	}
                  	else
                  	{
                  		echo "<liste>";
                  		echo'<item id="titre" name="'.$verification.'"/>';
                  		echo'<item id="contenu" name="'.fgets($fichier).'"/>';
                  		echo'<item id="left" name="'.fgets($fichier).'"/>';
                  		echo'<item id="top" name="'.fgets($fichier).'"/>';
                  		echo'<item id="width" name="'.fgets($fichier).'"/>';
                  		echo'<item id="height" name="'.fgets($fichier).'"/>';
                  		echo'<item id="type" name="'.fgets($fichier).'"/>';
                  		echo "</liste>";
                  	}
                  	fclose($fichier);
                  }
                  echo"</racine>";
                  ?>
                  


                  Celle-ci renvoie un xml (que vous pouvez consulter ici : fenetre_position.php

                  Ce xml est envoyé à la fonction readData en parametres Data. Et la fonction readData traite ce document de facon à extraire les valeur des attributs name pour creer une fenetre avec la fonction creer_fenetre :

                  function creer_fenetre(left,top,width,height,titre,contenu, type){
                          var fenetre = document.createElement("div"); 
                          fenetre.className="fenetre";
                          fenetre.style.left=left+"px"; //Modification de l'attribut left du style de notre div
                          fenetre.style.top=top+"px";
                          fenetre.style.width=width+"px";
                          fenetre.style.height=height+"px";
                  	if(document.all) fenetre.attachEvent("onmousedown",function (){premier_plan(fenetre)}); //Pour IE
                          else fenetre.addEventListener("mousedown",function (){premier_plan(fenetre)},true); //Pour les autres
                          //etc
                  
                  
                          
                          //On crée de la même manière la div "haut" :
                          fenetre.haut = document.createElement("div");
                          fenetre.haut.className="haut";
                  
                  	addEvent(fenetre.haut,"mousedown",function (event){commencer_deplacement(event,fenetre)});
                  	addEvent(fenetre.haut,"mouseup",arreter_deplacement);
                  	addEvent(fenetre.haut,"dblclick", function (){reduireDblClick(fenetre)});
                  
                  
                          //On crée ensuite les trois div qui y figureront :
                          fenetre.haut_gauche = document.createElement("div");
                          fenetre.haut_gauche.className="haut_gauche";
                          fenetre.haut_droite = document.createElement("div");
                          fenetre.haut_droite.className="haut_droite";
                          fenetre.haut_centre = document.createElement("div");
                          fenetre.haut_centre.className="haut_centre";
                  	fenetre.bouttonReduire = document.createElement("div");
                  	fenetre.bouttonReduire.className = "boutton";
                  	fenetre.bouttonFermer = document.createElement("div");
                  	fenetre.bouttonFermer.className = "boutton_X";
                  	fenetre.haut.titre = document.createElement("p");
                  	fenetre.haut.titre.className = "titre";
                  	
                  	addEvent(fenetre.bouttonReduire,"click",function (){reduireFenetre(fenetre)});
                  	addEvent(fenetre.bouttonFermer,"click",function (){fermerFenetre(fenetre)});
                  
                  	if(titre  == ""){
                  		var titre_demande = prompt('Titre de la fenêtre ?');
                  		if(titre_demande == "")
                  			var titre_fin = document.createTextNode("(Aucun titre)");
                  		else 
                  			var titre_fin = document.createTextNode(titre_demande);
                  	}
                  	else
                  	{
                  		var titre_fin = document.createTextNode(titre);
                  	}
                  
                  	var texte = document.createTextNode(" - ");
                  	var texte_X = document.createTextNode(" x ");
                  
                          //Puis on les insère une par une dans notre bloc "haut" :
                  	fenetre.bouttonFermer.appendChild(texte_X);
                  	fenetre.bouttonReduire.appendChild(texte);
                  	fenetre.haut.titre.appendChild(titre_fin);
                  	fenetre.haut_centre.appendChild(fenetre.haut.titre);
                  	fenetre.haut_centre.appendChild(fenetre.bouttonFermer);
                  	fenetre.haut_centre.appendChild(fenetre.bouttonReduire);
                          fenetre.haut.appendChild(fenetre.haut_gauche);
                          fenetre.haut.appendChild(fenetre.haut_droite);
                          fenetre.haut.appendChild(fenetre.haut_centre);
                  	
                          //On insère le tout (la div "haut" et les trois div à l'intérieur) dans le bloc "fenetre":
                          fenetre.appendChild(fenetre.haut);
                          
                          //On fait de même pour la div "milieu"
                          fenetre.milieu = document.createElement("div");
                          fenetre.milieu.className="milieu";
                          fenetre.milieu_gauche = document.createElement("div");
                          fenetre.milieu_gauche.className="milieu_gauche";
                          fenetre.milieu_droite = document.createElement("div");
                          fenetre.milieu_droite.className="milieu_droite";
                          fenetre.milieu_centre = document.createElement("div");
                          fenetre.milieu_centre.className="milieu_centre";
                  	if(type == 'txt') {
                  		if(contenu == "")
                  		{
                  			var contenu_demande = "";
                  			if(!(contenu_demande = prompt('Voulez vous remplir votre fenetre avec du texte ?'))){
                  				var ok = false; return;}
                  			var contenu_1 = document.createTextNode(contenu_demande);
                  			var ok = true;
                  			fenetre.milieu_centre.appendChild(contenu_1);
                  		}
                  		else
                  		{
                  			var contenu_1 = document.createTextNode(contenu);
                  			fenetre.milieu_centre.appendChild(contenu_1);
                  			var ok = true;
                  		}	
                  	}
                  	else if(type == 'frame') {
                  		if(contenu == "")
                  		{
                  			var frame = document.createElement("iframe");
                  			var src = "";
                  			if(!(src = prompt('Quel est l\'adresse du site que vous voulez inclure dans la fenetre ?'))) {
                  			var ok = false;
                  				return;}
                  			var ok = true;
                  			frame.src = "http://"+src;
                  			frame.width = "100%";
                  			frame.height = "100%";
                  			fenetre.milieu_centre.appendChild(frame);
                  		}
                  		else
                  		{
                  			var frame = document.createElement("iframe");
                  			frame.src = "http://"+contenu;
                  			frame.width = "100%";
                  			frame.height = "100%";
                  			fenetre.milieu_centre.appendChild(frame);
                  			var ok = true;
                  		}
                  	}
                          fenetre.milieu.appendChild(fenetre.milieu_gauche);
                          fenetre.milieu.appendChild(fenetre.milieu_droite);
                          fenetre.milieu.appendChild(fenetre.milieu_centre);
                          fenetre.appendChild(fenetre.milieu);
                          
                          //On fait de même pour la div "bas"
                          fenetre.bas = document.createElement("div");
                          fenetre.bas.className="bas";
                          fenetre.bas_gauche = document.createElement("div");
                          fenetre.bas_gauche.className="bas_gauche";
                          fenetre.bas_droite = document.createElement("div");
                          fenetre.bas_droite.className="bas_droite";
                          fenetre.bas_centre = document.createElement("div");
                          fenetre.bas_centre.className="bas_centre";
                          fenetre.bas.appendChild(fenetre.bas_gauche);
                          fenetre.bas.appendChild(fenetre.bas_droite);
                          fenetre.bas.appendChild(fenetre.bas_centre);
                          fenetre.appendChild(fenetre.bas);
                  
                   	premier_plan(fenetre);
                  	if(ok)
                          	document.body.appendChild(fenetre); //On insère le tout dans notre document, dans le corps
                  
                  }
                  


                  Le bout qui nous interesse est line 43. J'espere avoir bien détaillé :)

                  Merci de votre aide !
                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 juillet 2009 à 10:26:37

                    Salut,

                    En allant sur ta page, voici ce que je trouve

                    <liste>
                    <item id="titre" name=""/>
                    <item id="contenu" name="dfh "/>
                    <item id="left" name="100 "/>
                    <item id="top" name="100 "/>
                    <item id="width" name="100 "/>
                    <item id="height" name="100 "/>
                    <item id="type" name="txt  "/>
                    </liste>
                    −
                    <liste>
                    <item id="titre" name=""/>
                    <item id="contenu" name=""/>
                    <item id="left" name=""/>
                    <item id="top" name=""/>
                    <item id="width" name=""/>
                    <item id="height" name=""/>
                    <item id="type" name=""/>
                    </liste>
                    


                    À partir de la ligne 34, plus aucune info n'apparait, c'est la première source de l'erreur. La deuxième c'est la présence d'un petit espace en trop dans l'attribut name : <item id="height" name="100 "/> . Ce que je ne comprends pas par contre c'est pourquoi il attend la propriété height pour gueuler réagir alors que style.left est défini avant o_O .

                    Un petit coup de trim sur les fgets devrait régler le deuxième problème. Pour l'absence d'info à partir de la ligne 34, remplace ta vérification <?php if($verification == "") dans fenetre_position.php par <?php if(empty($verification)) .

                    Enjoy :D
                    • Partager sur Facebook
                    • Partager sur Twitter
                      8 juillet 2009 à 11:54:20

                      I don't believe in ! It run ! Ouaaaaaahhh ! Muchas gracias amigos ! Merci beaucoup à vous pour m'avoir aidé :) Merci !

                      (J'ai aussi rajouté trim sur $verification, car, j'avais deja essayé empty mais cela ne marchait pas.... Je me suis dit que cela créait aussi des espaces... Et voila tout marche ! :) Merci beaucoup pour m'avoir donnée cette fonction inoubliable ! ...)

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Js : Erreur d'analyse...

                      × 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