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 :
- function jcalendar(jour)
- {
- document.getElementById('j_calendar').style.visibility='visible';
- jour=jour.toString();
- if(jour.length < 2)
- {
- jour="0"+jour;
- }
- var selmois = document.getElementById('mois');
- var index = selmois.selectedIndex;
-
-
- mois = selmois.options[index].value;
- moistext = selmois.options[index].text;
- var selannee = document.getElementById('annee');
- var index = selannee.selectedIndex;
-
- annee = selannee.options[index].value;
-
- var Xhr_Object = null;
- if (window.XMLHttpRequest) // Mozilla
- {Xhr_Object = new XMLHttpRequest();}
-
- else if(window.ActiveXObject) // Internet Explorer
- {Xhr_Object = new ActiveXObject('Microsoft.XMLHTTP');}
-
- else{// XMLHttpRequest non supporté par le navigateur
- alert("__IncompatibleXMLHTTP__" );
- return;}
- //Récupération du XML sur la page serveur
- var Source = './req_calendrier.php';
- //choix de la méthode post pour discuter avec le serveur
- Xhr_Object.open('POST', Source, true);
- //si mon post est trop lent par rapport au serveur, on doit être prêt à recevoir la réponse du serveur
- //4 : le serveur a fini de travailler et a envoyé une réponse.
- Xhr_Object.onreadystatechange = function()
- {
- if(Xhr_Object.readyState == 4)
- {
- events += '<h3>Entraînements</h3><p>';
- if(XML_Doc.getElementsByTagName('CompteurEnt').item(0).firstChild.nodeValue<=0)
- {
- events += 'Aucun entraînement prévu à cette date.';
- }
-
- else
- {
-
- for (Index = 0; Index <= XML_Doc.getElementsByTagName('CompteurEnt').item(0).firstChild.nodeValue; Index++)
- {
- var id_ent=XML_Doc.getElementsByTagName('ide').item(Index).firstChild.nodeValue;
-
- //mise en forme de l'heure.
- var hdeb=XML_Doc.getElementsByTagName('hdebe').item(Index).firstChild.nodeValue;
- hdeb=hdeb.toString();
-
- //mise en forme de l'heure
- while(hdeb.length < 4)
- {
- hdeb="0"+hdeb;
- }
-
- var hfin=XML_Doc.getElementsByTagName('hfine').item(Index).firstChild.nodeValue.toString();
- hfin=hfin.toString();
- while(hfin.length < 4)
- {
- hfin="0"+hfin;
- }
-
- hdeb=hdeb.substr(0, 2)+"h "+hdeb.substr(2,2);
- hfin=hfin.substr(0, 2)+"h "+hfin.substr(2,2);
-
-
- 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>";
- }
- }
- }
- }
- Xhr_Object.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
- var Arguments = 'annee='+annee+'&mois='+mois+'&jour='+jour;
- Xhr_Object.send(Arguments);
- }
|
(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 :
- <?xml version="1.0" encoding="UTF-8"?>
- <calendrier>
- <Entrainements>
- <CompteurEnt>1</CompteurEnt>
- <hdebe>1800</hdebe>
- <hfine>2000</hfine>
- <comme>Entraînement des cadets</comme>
- <ide>6</ide>
- <educe>HIPIE Tiki</educe>
- <nomce>Cadets</nomce>
- </Entrainements>
- </calendrier>
|
Et enfin, le code PHP permettant de générer ce code xml
Code :
- header('Pragma: no-cache');
- header('Expires: 0');
- header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
- header('Cache-Control: no-cache, must-revalidate');
- header('Content-type: application/xml');
-
- session_start();
- include("./connectdb2.php" );
- $Xml = new xmlWriter();
- $Xml->openMemory();
- $Xml->setIndentString(' ');
- $Xml->setIndent(true);
- $Xml->startDocument('1.0','UTF-8');
- $Xml->startElement ('calendrier');
- //les entrainements
- $chaine_req="
- REQUETE SQL QUI VA BIEN";
- $req_evt=mysql_query($chaine_req)or die(mysql_error());
- $Xml->startElement ('Entrainements');
- if (mysql_num_rows($req_evt)>0)
- {// Créer un objet xmlWriter qui écrit des balises xHTML
- $Xml->startElement ('CompteurEnt'); $Xml->text (mysql_num_rows($req_evt)); $Xml->endElement();
-
- while ($Sql_Ligne_M = mysql_fetch_array($req_evt))
- {
- if($Sql_Ligne_M['commentaire']=="" )
- {
- $comm="Aucun commentaire.";
- }
- else
- {
- $comm=html_entity_decode(html_entity_decode($Sql_Ligne_M['commentaire']));
- }
- $Xml->startElement ('hdebe'); $Xml->text ($Sql_Ligne_M['heure_debut']); $Xml->endElement();
- $Xml->startElement ('hfine'); $Xml->text ($Sql_Ligne_M['heure_fin']); $Xml->endElement();
- $Xml->startElement ('comme'); $Xml->text ($comm); $Xml->endElement();
- $Xml->startElement ('ide'); $Xml->text ($Sql_Ligne_M['id']); $Xml->endElement();
- $Xml->startElement ('educe'); $Xml->text ($Sql_Ligne_M['nomed']." ".$Sql_Ligne_M['prenomed']); $Xml->endElement();
- $Xml->startElement ('nomce'); $Xml->text ($Sql_Ligne_M['nomc']); $Xml->endElement();
- }
-
- }
- else
- {
- $Xml->startElement ('CompteurEnt'); $Xml->text (0); $Xml->endElement();
- }
- $Xml->endElement();
- $Xml->endElement();
-
- print $Xml->outputMemory(true);
- Unset($_POST, $Sql_Ligne_M, $req_evt, $Xml);
-
- mysql_close();
|
Problème :
Ce code me renvoie l'erreur :
Uncauth TypeError: Cannot read property 'firstChild' of null
Xhr_Object.onreadystatechange
Voilà
Merci à tous pour votre aide.
Message édité par brutax le 20-10-2013 à 10:58:45