Javascript : 'Erreur : Objet Requis'

Melkor -  
 Melkor -
Bonjour,

Je suis en train de taffer sur un projet en partie réalisée avec AJAX et XML, et je me retrouve bloqué sur un problème d'objet requis :/

Mon code marche parfaitement sous FF (normal, comme d'hab) mais IE fait chier (encore une fois , comme d'hab).

Je vous colle en dessous ma fonction qui plante :

/** fonction pour l'affichage de la carte région agrandie en plein ecran **/
function afficherCarteFullscreen(pays, region, saison)
{
	opacityOn();
	
	getId('cartes_fullscreen').style.display = 'block';
	getId('cartes_fullscreen').innerHTML = '<img id="loading" src="site/media/descriptifs/loading_bar.gif" alt="" title="" />';
	
	var data = 'pays=' + pays + '&region=' + region + '&saison=' + saison;
	
	xhr = createRequestObject();
	
	xhr.onreadystatechange = function ()
	{
		if(xhr.readyState == 4)
		{
			if (xhr.status == 200)
			{
				var docXML = xhr.responseXML; //Objet permettant de gérer le xml généré dans le script PHP
				
				stations = docXML.getElementsByTagName('station');
				var html = docXML.getElementsByTagName('template');
				getId('cartes_fullscreen').innerHTML = html[0].firstChild.nodeValue;
				
				getId('img_grande_carte').src = 'site/media/cartes/' + pays + '/' + region + '/generale.png';
				
				// on assigne des margin aux images/points représentant les stations; on les positionne
				for(var i = 0; i < stations.length; i++)
				{
					getId('station_' + stations[i].getAttribute('code')).style.margin = stations[i].getElementsByTagName('coordonnee_y')[0].firstChild.nodeValue + 'px 0px 0px ' + stations[i].getElementsByTagName('coordonnee_x')[0].firstChild.nodeValue + 'px';
				}
			}
			else alert(xhr.status + " " + xhr.statusText);
		}
	};
	
	xhr.open("POST", "site/includes/cartes/ajax_cartes_fullscreen.php", true);
	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xhr.send(data);
}


Au moment ou j'exécute la fonction, j'ai une erreur, et mon code semble bloquer au moment ou il passe sur cette ligne : getId('cartes_fullscreen').innerHTML = html[0].firstChild.nodeValue;

Si quelqu'un sait de quoi il en retourne...

En espérant avoir été clair, et dans l'attente de réponses ^^, merci d'avance.

Baptiste
Configuration: Windows XP Pro
Firefox 3.0.3 / Internet Explozer 6/7

5 réponses

  1. Marco la baraque Messages postés 1030 Statut Contributeur 329
     
    Bonsoir Melkor,
    J'ai juste une question :
    html[0].firstChild.nodeValue : pourquoi n'utilises-tu pas un identifiant pour récupérer ton élément, vu qu'il est fixe? Ca t'éviterait d'avoir des problèmes de compatibilité comme celui-là.

    Cordialement,
    0
  2. Melkor
     
    Bonjour,

    Je débute tout juste dans le parsage de XML, j'ai donc utilisé ce que j'ai trouvé par ci par la.
    Pourrais-tu m'expliquer plus en détail ta façon de voir la chose s'il te plais ? Je ne sais pas comment appeler un noeur d'après un ID...

    Merci pour ta réponse, bonne journée.
    Baptiste
    0
    1. Alain_42 Messages postés 5413 Statut Membre 904
       
      Salut,

      en JS pour atteindre un element par son id:

      var obj=document.getElementById('id_a_atteindre');
      
      //et après tu manipules cet obj comme tu veux avec ses propriétés et methodes propres
      
      ex:
      
      obj.value
      obj.style
      
      
      0
  3. Melkor
     
    Salut,

    Merci pour tes précisions Alain, mais ça je connais déjà. C'est surtout a propos du XML que je suis pas dans mon élément. Je n'ai pas vraiment compris ce que Marco a voulu me dire, on peut mettre des id à nos balises XML ??

    Bonne journée
    0
    1. Marco la baraque Messages postés 1030 Statut Contributeur 329
       
      Bonjour,
      Quand tu fais ceci :
      ...
      var html = docXML.getElementsByTagName('template');
      getId('cartes_fullscreen').innerHTML = html[0].firstChild.nodeValue;
      ...
      

      Tu récupères toujours le même objet (le premier noeud 'template' de ta réponse).
      Autrement dit, si ton XML ressemble à un truc comme ça, tu récupères le tag en gras :
      <?xml version="1.0" encoding="ISO-8859-1"?> 
      <root> 
        <station>blabla</station>
        <template>...</template>
        <template>...</template>
        <template>...</template>
      </root>
      


      Ma question était donc : vu que tu récupères toujours le même élément (le premier tag template), pourquoi n'utilises-tu pas un identifiant :
      <?xml version="1.0" encoding="ISO-8859-1"?> 
      <root> 
        <station>blabla</station>
        <template id="firstTemplate">...</template>
        <template>...</template>
        <template>...</template>
      </root>
      

      Dans ton javascript tu aurais donc quelque chose du genre :
      ...
      getId('cartes_fullscreen').innerHTML = docXml.getElementById('firstTemplate').value;
      ...


      Cordialement,
      0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Melkor
     
    OK, bah merci pour ces explications Marco.
    Je ne sais pas pourquoi j'avais pas pensé a utiliser des ID pour le XML, mais effectivement si c'est autorisé ça simplifie quand même pas mal la vie ^^ !

    Bonne journée
    Baptiste
    0