Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1165 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [Résolu][JS] Cannot read property 'firstChild' of null

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu][JS] Cannot read property 'firstChild' of null

n°2206612
brutax
Posté le 13-10-2013 à 14:22:15  profilanswer
 

Salut à vous ;)
 
Bon, voilà deux jours que je galère avec un script.
Le sujet est la gestion d'un calendrier pour un club sportif.
 
Alors, j'ai un calendrier dans la partie gauche de l'écran avec tous les jours du mois. Quand je clique sur une date, javascript envoie une requête au serveur qui renvoie tous les entraînements de cette date sous format xml.
 
Le code javascript appelé lorsqu'on clique sur une date est le suivant :
 

Code :
  1. function jcalendar(jour)
  2. {
  3. document.getElementById('j_calendar').style.visibility='visible';
  4. jour=jour.toString();
  5. if(jour.length < 2)
  6. {
  7. jour="0"+jour;
  8. }
  9. var selmois = document.getElementById('mois');
  10. var index = selmois.selectedIndex;
  11.  
  12.  
  13. mois = selmois.options[index].value;
  14. moistext = selmois.options[index].text;
  15. var selannee = document.getElementById('annee');
  16. var index = selannee.selectedIndex;
  17.  
  18. annee = selannee.options[index].value;
  19.  
  20. var Xhr_Object = null;
  21. if (window.XMLHttpRequest) // Mozilla
  22. {Xhr_Object = new XMLHttpRequest();}
  23.              
  24. else if(window.ActiveXObject) // Internet Explorer
  25. {Xhr_Object = new ActiveXObject('Microsoft.XMLHTTP');}
  26.                        
  27. else{// XMLHttpRequest non supporté par le navigateur
  28. alert("__IncompatibleXMLHTTP__" );
  29. return;}
  30.   //Récupération du XML sur la page serveur
  31.   var Source = './req_calendrier.php';
  32. //choix de la méthode post pour discuter avec le serveur
  33. Xhr_Object.open('POST', Source, true);
  34. //si mon post est trop lent par rapport au serveur, on doit être prêt à recevoir la réponse du serveur
  35. //4 : le serveur a fini de travailler et a envoyé une réponse.
  36. Xhr_Object.onreadystatechange = function()
  37. {
  38. if(Xhr_Object.readyState == 4)
  39. {
  40.      events += '<h3>Entraînements</h3><p>';
  41.      if(XML_Doc.getElementsByTagName('CompteurEnt').item(0).firstChild.nodeValue<=0)
  42.      {
  43.       events += 'Aucun entraînement prévu à cette date.';
  44.      }
  45.    
  46.      else
  47.      {
  48.    
  49.       for (Index = 0; Index <= XML_Doc.getElementsByTagName('CompteurEnt').item(0).firstChild.nodeValue; Index++)
  50.       {
  51.       var id_ent=XML_Doc.getElementsByTagName('ide').item(Index).firstChild.nodeValue;
  52.    
  53.       //mise en forme de l'heure.
  54.       var hdeb=XML_Doc.getElementsByTagName('hdebe').item(Index).firstChild.nodeValue;
  55.       hdeb=hdeb.toString();
  56.    
  57.      //mise en forme de l'heure      
  58.       while(hdeb.length < 4)
  59.       {
  60.        hdeb="0"+hdeb;
  61.       }
  62.    
  63.       var hfin=XML_Doc.getElementsByTagName('hfine').item(Index).firstChild.nodeValue.toString();
  64.       hfin=hfin.toString();
  65.       while(hfin.length < 4)
  66.       {
  67.        hfin="0"+hfin;
  68.       }
  69.    
  70.       hdeb=hdeb.substr(0, 2)+"h "+hdeb.substr(2,2);
  71.       hfin=hfin.substr(0, 2)+"h "+hfin.substr(2,2);
  72.    
  73.    
  74.        events += "<fieldset><span class=\"souligne\">De "+hdeb+" à "+hfin+"</span><br>"+XML_Doc.getElementsByTagName('nomce').item(Index).firstChild.nodeValue+" avec      "+XML_Doc.getElementsByTagName('educe').item(Index).firstChild.nodeValue+"<br><br>"+XML_Doc.getElementsByTagName('comme').item(Index).firstChild.nodeValue+"<br><br>"+boutons+"</fieldset>";
  75.        }
  76.      }
  77. }
  78. }
  79. Xhr_Object.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
  80. var Arguments = 'annee='+annee+'&mois='+mois+'&jour='+jour;
  81. Xhr_Object.send(Arguments);
  82. }


(Je sais pas si mes copier/coller pour le forum sont bons, mais dans mon script il ne manque pas de parenthèses ou d'acolades.)
 
Ensuite, voici le XML renvoyé par mon req_calendrier.php
 

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <calendrier>
  3.    <Entrainements>
  4.       <CompteurEnt>1</CompteurEnt>
  5.       <hdebe>1800</hdebe>
  6.       <hfine>2000</hfine>
  7.       <comme>Entraînement des cadets</comme>
  8.       <ide>6</ide>
  9.       <educe>HIPIE Tiki</educe>
  10.       <nomce>Cadets</nomce>
  11.    </Entrainements>
  12. </calendrier>


 
Et enfin, le code PHP permettant de générer ce code xml

Code :
  1. header('Pragma: no-cache');
  2. header('Expires: 0');
  3. header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
  4. header('Cache-Control: no-cache, must-revalidate');
  5. header('Content-type: application/xml');
  6.  
  7. session_start();
  8. include("./connectdb2.php" );
  9. $Xml = new xmlWriter();
  10. $Xml->openMemory();
  11. $Xml->setIndentString('   ');
  12. $Xml->setIndent(true);
  13. $Xml->startDocument('1.0','UTF-8');
  14. $Xml->startElement ('calendrier');
  15. //les entrainements
  16. $chaine_req="
  17. REQUETE SQL QUI VA BIEN";
  18. $req_evt=mysql_query($chaine_req)or die(mysql_error());
  19. $Xml->startElement ('Entrainements');
  20. if (mysql_num_rows($req_evt)>0)
  21. {// Créer un objet xmlWriter qui écrit des balises xHTML
  22.      $Xml->startElement ('CompteurEnt');       $Xml->text  (mysql_num_rows($req_evt));                $Xml->endElement();
  23.      
  24.      while ($Sql_Ligne_M = mysql_fetch_array($req_evt))
  25.             {
  26.  if($Sql_Ligne_M['commentaire']=="" )
  27.  {
  28.   $comm="Aucun commentaire.";
  29.  }
  30.  else
  31.  {
  32.   $comm=html_entity_decode(html_entity_decode($Sql_Ligne_M['commentaire']));
  33.  }
  34.  $Xml->startElement ('hdebe');       $Xml->text  ($Sql_Ligne_M['heure_debut']);               $Xml->endElement();
  35.  $Xml->startElement ('hfine');       $Xml->text  ($Sql_Ligne_M['heure_fin']);             $Xml->endElement();
  36.  $Xml->startElement ('comme');       $Xml->text  ($comm);             $Xml->endElement();
  37.  $Xml->startElement ('ide');       $Xml->text  ($Sql_Ligne_M['id']);             $Xml->endElement();
  38.  $Xml->startElement ('educe');       $Xml->text  ($Sql_Ligne_M['nomed']." ".$Sql_Ligne_M['prenomed']);             $Xml->endElement();
  39.  $Xml->startElement ('nomce');       $Xml->text  ($Sql_Ligne_M['nomc']);             $Xml->endElement();
  40. }
  41.      
  42. }
  43. else
  44. {
  45. $Xml->startElement ('CompteurEnt');       $Xml->text  (0);                $Xml->endElement();
  46. }
  47. $Xml->endElement();
  48. $Xml->endElement();
  49.  
  50. print $Xml->outputMemory(true);
  51. Unset($_POST, $Sql_Ligne_M, $req_evt, $Xml);
  52.  
  53. mysql_close();


 
Problème :
Ce code me renvoie l'erreur :  
 
Uncauth TypeError: Cannot read property 'firstChild' of null
Xhr_Object.onreadystatechange
 
Voilà  [:petrus75]  
 
Merci à tous pour votre aide.


Message édité par brutax le 20-10-2013 à 10:58:45
mood
Publicité
Posté le 13-10-2013 à 14:22:15  profilanswer
 

n°2206614
olivthill
Posté le 13-10-2013 à 15:03:01  profilanswer
 

C'est de l'Ajax.
 
Une lecture rapide montre une petite incohérence.

var hdeb=XML_Doc.getElementsByTagName('hdebe').item(Index).firstChild.nodeValue;
 var hfin=XML_Doc.getElementsByTagName('hfine').item(Index).firstChild.nodeValue.toString();

Pourquoi avoir ToString() pour le deuxième ? Ce n'est peut-être pas grave.
 
Le message d'erreur est clair : Uncauth TypeError: Cannot read property 'firstChild' of null
Le problème vient de ce qu'il est noté parent.firstChild quelque part avec un parent qui est nul.
 
L'ennui, c'est qu'il y a plusieurs lignes contenant firstChild, susceptibles de causer ce problème.
Il faudrait circonscrire le problème, par exemple en faisant des tests et en mettant des lignes en commentaires.
 
Edit :
Ce qui est étrange, c'est que XML_Doc est défini nulle part.
Il me semble qu'il manque :

XML_Doc =Xhr_Object.responseXML;
events ="";

Message cité 1 fois
Message édité par olivthill le 13-10-2013 à 15:24:57
n°2206620
brutax
Posté le 13-10-2013 à 15:42:25  profilanswer
 

olivthill a écrit :

C'est de l'Ajax.

 

Une lecture rapide montre une petite incohérence.

var hdeb=XML_Doc.getElementsByTagName('hdebe').item(Index).firstChild.nodeValue;
 var hfin=XML_Doc.getElementsByTagName('hfine').item(Index).firstChild.nodeValue.toString();

Pourquoi avoir ToString() pour le deuxième ? Ce n'est peut-être pas grave.


Bien vu.
c'est une petite coquille, je l'ai corrigée mais le problème ne vient pas de là.

 
olivthill a écrit :


Le message d'erreur est clair : Uncauth TypeError: Cannot read property 'firstChild' of null
Le problème vient de ce qu'il est noté parent.firstChild quelque part avec un parent qui est nul.

 

L'ennui, c'est qu'il y a plusieurs lignes contenant firstChild, susceptibles de causer ce problème.
Il faudrait circonscrire le problème, par exemple en faisant des tests et en mettant des lignes en commentaires.


Des test de quel genre ?

 

est ce que je peux faire

Code :
  1. if(var id_evt=XML_Doc.getElementsByTagName('id').item(Index).firstChild.nodeValue;)
  2. {
  3.      alert("id_evt OK" );
  4. }


?

 
olivthill a écrit :


Edit :
Ce qui est étrange, c'est que XML_Doc est défini nulle part.
Il me semble qu'il manque :

XML_Doc =Xhr_Object.responseXML;
events ="";



Ah ? Je connais pas ça...
Faut le mettre où normalement ?

 

Merci pour ton aide :)


Message édité par brutax le 13-10-2013 à 16:04:33
n°2206648
MaybeEijOr​Not
but someone at least
Posté le 13-10-2013 à 22:44:15  profilanswer
 

Je dirai après le :
 

Code :
  1. if(Xhr_Object.readyState == 4)
  2. {

n°2207379
brutax
Posté le 20-10-2013 à 10:38:47  profilanswer
 

Salut !
Effectivement il manquait bien ce que tu m'as indiqué.
Malheureusement, ça ne résout pas mon problème non pus :'(

n°2207383
brutax
Posté le 20-10-2013 à 10:58:05  profilanswer
 

AAAAaaaaahhhhhh !!!!!
J'ai trouvééééééééééééééééééé
 
Putain mais OMG quoi !!!!
 
Le problème venait de là :

Code :
  1. for (Index = 0; Index <= XML_Doc.getElementsByTagName('CompteurEnt').item(0).firstChild.nodeValue; Index++)


 
Fallait juste mettre "<" sinon je loop une fois de trop et ça plante  [:petrus75]  
 
Roohhh... Une semaine pour trouver ça  
 [:fegafobobos:2]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [Résolu][JS] Cannot read property 'firstChild' of null

 

Sujets relatifs
Une sorte de read next en MS-DOS[PHP / JS] jquery file upload : retrouver nom du fichier uploadé ?
[PHP/JS]Envoyer contenu d'une cellule via XMLHttpRequestremplir un tableau HTML avec des variables JS
[PHP/JS]Passage de valeurs php vers une fonction JS[JS] Problème limite d'une variable atteinte
objet nullJS/PHP
[JS/PHP/XML] Les encodages...[JS] récupérer le netBIOS d'une machine
Plus de sujets relatifs à : [Résolu][JS] Cannot read property 'firstChild' of null


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR