Javascript : 'Erreur : Objet Requis'

Fermé
Melkor - 7 nov. 2008 à 14:42
 Melkor - 21 nov. 2008 à 09:27
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

5 réponses

Up ???
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
17 nov. 2008 à 20:34
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
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
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
19 nov. 2008 à 10:53
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
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
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
20 nov. 2008 à 14:22
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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