11548 sujets

JavaScript, DOM et API Web HTML5

Pages :
Bonjour, je dois faire un site web pour un hôtel et je commence à déserpérer devant un problème de javascript, qui je l'avoue, n'est pas ma tasse de thé.

Ce que je veux faire :
récupérer des données dans un fichier xml pour les afficher sur ma page
J'ai trouvé une fonction qui faisait ça sur ce forum, mais voilà, ça ne marche pas sur firefox.
Voici mon code :

html

...
            <div id="page_content_right">
		<script language="javascript" src="includes/page_contents_right.js"></script>
            </div>
...


javascript


if (document.implementation && document.implementation.createDocument) {
	// FIREFOX
	docXml = document.implementation.createDocument("", "", null);
}
else if (window.ActiveXObject){
	// IE
	docXml = new ActiveXObject("Microsoft.XMLDOM");
}

docXml.load("datas/special_offers.xml");


var special1Title= docXml.getElementsByTagName('title')[0].firstChild.nodeValue;
var special1Contents= docXml.getElementsByTagName('contents')[0].firstChild.nodeValue;
var special2Title= docXml.getElementsByTagName('title')[1].firstChild.nodeValue;
var special2Contents= docXml.getElementsByTagName('contents')[1].firstChild.nodeValue;
...


xml

?xml version="1.0" encoding="iso-8859-1" ?> 

<specialOffers>
	<title>Special Offer 1</title>
	<contents>Special offer details and dates here.</contents>

	<title>Special Offer 2</title>
	<contents>Special offer details and dates here.</contents>
</specialOffers>


Sur IE, auucun problème.
Sur Firefox, le programme s'arrète à l'instruction "firstChild" (si on met une alert après, ca ne fait rien)

SVP aidez moi
Modifié par yahrou (05 Dec 2006 - 14:56)
ça marche bien normalement firstChild sur Firefox....
met le tout dans un try catch pour connaitre ton erreur.
Modifié par masseuro (04 Dec 2006 - 17:54)
Firefox déconne un peu avec firstChild, il faut tout coller (en tout cas en html en xml je sais pas):
<specialOffers><title>
au lieu de

<specialOffers>
<title>


et aprés on parle de IE et ces listes... Smiley langue
Modifié par matmat (04 Dec 2006 - 18:24)
matmat a écrit :
Firefox déconne un peu avec firstChild, il faut tout coller (en tout cas en html en xml je sais pas):
<specialOffers><title>
au lieu de

<specialOffers>
<title>


et aprés on parle de IE et ces listes... Smiley langue
Heu, je ne crois pas que Firefox "déconne".

Il est normal que des noeuds texte soient ajoutés aux endroits où il y a... du texte. Il me semble bien que ça fait partie des spécifications du DOM (à vérifier).
bonsoir

Concernant les document Xml et leurs analyses , certains parseur ( et c'est le cas de Firefox je crois ) conserve les espaces placé entre les éléments

Ce qu'on apelle les espaces blancs ( whitespace) et qui sont considéré comme noeud text (meme s'il n'aparaissent) pas ....

le 'first child" peut donc etre un noeud texte "inatendu" alors que l'on cherche à récupérer le noeud 'title' dans ce cas .... et comme c'est une noeud texte 'vide' !

essaie de voir si le noeud récupéré est de type Element ( == 1) ou de type
'text ( ==3) .

Complément d'infos sur quiksmode ..

a écrit :

Firefox déconne un peu avec firstChild, il faut tout coller


... dans le principe oui tu supprimes l'un des 'espace blanc' ( tab, linefeed, carriage return, espace) , mais écrire tout un document Xml sans espace , retout à la ligne ... ect ... je ne voudrais pas à avoir à l'uitliser .

Il y a aussi l'approche de traitement de données xml en les transformant en un format de sortie ( par Xhtml ) avec le langage Xsl .... ( pas de script )

en espèrant que cela t'aide un peu ..
Merci pour vos conseils mais ca ne marche toujours pas. J'ai retiré tous les espaces mais ça ne fait que rendre mon fichier illisible.

Je vois bien que le problème vient de la lecture du noeud, ce code ci :


var special1Title= docXml.getElementsByTagName("title")[0];

alert(special1Title);


donne "object" sur IE et "undiefined" sur Firefox

Ou peut être le document est-il mal chargé par firefox ? Je n'utilise pas le même code sous IE et firefox pour créer le doc, mais j'ai tout repris sur un code qui normalement fonctionne que j'ai trouvé ici
c'est bon, j'ai trouvé d'où venait le problème, il fallqit chargé le document XML à l'ouverture de la page et pas juste avant de récupérer les valeurs...

Merci quand même pour votre aide
Hello,

Je ne suis pas sûr d'avoir compris ce que tu dis, mais le mieux est d'ajouter un événement onload pour utiliser ton document XML au moment où tu es sûr qu'il a fini d'être chargé.

Tu trouveras une explication détaillée chez QuirksMode.
Modérateur
Salut,
a écrit :
Ce que je veux faire :
récupérer des données dans un fichier xml pour les afficher sur ma page
C'est optionnel ces données ou tout le monde doit les voir ? Smiley rolleyes ... parce que, dans ton cas, pas de JS, pas d'affichage... Smiley confus donc si c'est important, c'est vraiment dommage, surtout lorsqu'il s'agit d'un site pro... Smiley decu
Modifié par koala64 (05 Dec 2006 - 10:53)
Maintenant, la grande majorité des utilisateurs acceptent le javascript.
Et dans mon cas c'est la seule solution.
en effet, ce n'est pas moi qui décide de ce que je dois utiliser, et ici c'est un site uniquement html (pas de PHP ni ASP ni JSP)

Or c'est soit, j'importe les données en javascript, soit l'hotel devra modifier toutes les pages du site à chaque fois qu'il veut changer son offre spéciale.
Modérateur
tu es obligé de passer par xml ? pourquoi pas une iframe dans ce cas ? Au moins, ça marche JS désactivé et une seule page sera à modifier... même si ce n'est pas le top... Tu peux même mettre les deux... Si JS activé, tu vires l'iframe, sinon, tu la mets...
Modifié par koala64 (05 Dec 2006 - 11:08)
a écrit :
Je ne suis pas sûr d'avoir compris ce que tu dis, mais le mieux est d'ajouter un événement onload pour utiliser ton document XML au moment où tu es sûr qu'il a fini d'être chargé.


En fait, j'ai compris mon problème

Je veux afficher ses données au chargement de la page, or le fichier xml n'est pas terminé de charger, voilà pourquoi les données de s'affichent pas.

En fait, ça ne pose plus de problème avec Firefox maintenant que je charge le fichier au chargement de la page mais c'est Ie qui m'embête maintenant. Il a tendance à m'affihcer la page alors que le xml n'est pas chargé, et si j'attend, avec l'équivalent de onload, ca m'affiche monpeitit bout de page au mauvais endroit, cad à la place de la page entière.
Je ne sais pas si je suis très claire, mais la conclusion c'est que ca ne marche pas du tout
a écrit :
tu es obligé de passer par xml ? pourquoi pas une iframe dans ce cas ? Au moins, ça marche JS désactivé et une seule page sera à modifier... même si ce n'est pas le top... Tu peux même mettre les deux... Si JS activé, tu vires l'iframe, sinon, tu la mets...


Qu'appelles-tu iframes, les pages de cadre ? A vrai dire, j'ai des contraintes graphiques assez importantes et l'information en tant que telle n'est pas si fondamentale...
Administrateur
Bonjour,

yahrou a écrit :
c'est bon, j'ai trouvé d'où venait le problème, il fallqit chargé le document XML à l'ouverture de la page et pas juste avant de récupérer les valeurs...

Merci quand même pour votre aide

si tu considères le sujet comme [Résolu] ... Smiley cligne

yahrou a écrit :
Maintenant, la grande majorité des utilisateurs acceptent le javascript.
Et dans mon cas c'est la seule solution.
en effet, ce n'est pas moi qui décide de ce que je dois utiliser, et ici c'est un site uniquement html (pas de PHP ni ASP ni JSP)

Or c'est soit, j'importe les données en javascript, soit l'hotel devra modifier toutes les pages du site à chaque fois qu'il veut changer son offre spéciale.

Même pas un include(); en PHP? Smiley sweatdrop
Les pages (la sortie HTML) savent se modifier elles-mêmes (côté serveur) à partir de données extérieures ...

Pour JS, oui "la grande majorité des utilisateurs (l')accepte" ... La grande majorité des utilisateurs utilise IE aussi, tu ne devrais pas te préoccuper de Firefox et toutes ces parts de marché inutiles Smiley rolleyes
Bon j'arrête de troller, tu as peut-être vraiment des contraintes techniques/client venues toutes droit de 10 ans en arrière
J'ai trouvé d'où venait le problème mais si tu lis la suite, tu verras que ce n'est pas encore résolu...
a écrit :
Pour JS, oui "la grande majorité des utilisateurs (l')accepte" ... La grande majorité des utilisateurs utilise IE aussi, tu ne devrais pas te préoccuper de Firefox et toutes ces parts de marché inutiles


Oui, enfin c'est pas le même prdre de grandeur. Les sans javascript doivent être à peu près 1% et ils n'ont sans doute pas de quoi se payer l'hôtel, alors que les FireFox sont entre 30 et 40 %
Modérateur
Tu peux multiplier ton chiffre par 10 pour les sans-JS... Smiley cligne

Y'a pas que les pc... (téléphones, etc...)

a écrit :
et ils n'ont sans doute pas de quoi se payer l'hôtel
idée reçue...
Modifié par koala64 (05 Dec 2006 - 11:31)
donc je repose la question finale de toutes mes expérences :

Comment puis je afficher au chargement de la page des données xml avec du javasript. Le problème étant qu'il faut les afficher au chargement et non après avoir appuyé sur un bouton...
Modérateur
Ben en chargeant ta fonction au démarrage via un window.onload, à défaut de mieux...

function Insert()
{
   ...
}
window.onload = Insert;
Pages :