11548 sujets

JavaScript, DOM et API Web HTML5

Salut,
J'ai récupérer un script sur alsacreations.

if (document.implementation && document.implementation.createDocument) {
// déclaration pour Mozilla et FF
docXml = document.implementation.createDocument('', '', null); 
} else if (window.ActiveXObject) {
// déclaration pour IE
docXml = new ActiveXObject("Microsoft.XMLDOM"); 
} else alert('Erreur chargement xml.');

	docXml.load("version.xml");
	alert('debug->' + docXml.getElementsByTagName('version').length);


ça vaut toujours 0!!
je ne comprends pas.
version.xml contient:

<version>200707311302</version>


j'ai rajouté:

<?xml version="1.0" encoding="utf-8" ?>

mais rien y fait...
pourtant version.xml se trouve dans le même repertoire que le script.
En réalité ça ne sera pas le cas...peut on mette une url en paramètre de la méthode load?

bon et sinon comment faire pour que ça marche?
merci.
Modifié par cassyb (01 Aug 2007 - 14:14)
Salut,

Je te déconseille d'appliquer la méthode "je trouve du code sur un forum, je le recopie, sans même essayer de comprendre comment il fonctionne".

La méthode load est asynchrone, tu n'as donc absolument aucune garantie que le document soit chargé quand tu appelles ton alert.

Pour plus d'info, je te conseille de lire la page de PPK à ce sujet.
bon j'ai compris...
pour firefox faut le faire sur l'evenement onload.

source:
http://www.w3schools.com/dom/tryit.asp?filename=note_parsertest_crossbrowser


var currentTime = new Date();
var timestamp = currentTime.getTime();

var xmlDoc;
//load xml file
// code for IE
if (window.ActiveXObject){
	xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	xmlDoc.async=false;
	xmlDoc.load(document_client + "version.xml?ts=" + timestamp);
	getVersion();
// ici un alert marche surement
//alert(xmlDoc.getElementsByTagName("version")[0].firstChild.nodeValue);
}
// code for Mozilla, etc.
else if (document.implementation && document.implementation.createDocument) {
	xmlDoc= document.implementation.createDocument("","",null);
	xmlDoc.load(document_client + "version.xml?ts=" + timestamp);
	xmlDoc.onload=getVersion
// ici un alert ne marche pas
//alert(xmlDoc.getElementsByTagName("version")[0].firstChild.nodeValue);
} else alert('Your browser cannot handle this script');

function getVersion(){
// ici un alert marche
//alert(xmlDoc.getElementsByTagName("version")[0].firstChild.nodeValue);
window['version'] = xmlDoc.getElementsByTagName("version")[0].firstChild.nodeValue;
}


Merci pour tes explications, dans le post initial il n'y avait pas cette reference, le code était mis sans contexte en pensant qu'il marcherait tel qu'il était.
Modifié par cassyb (01 Aug 2007 - 14:08)
leur code comme celui de ta reference ont pas l'air d'être compatible avec Safari...
j'ai un:
TypeError: Value undefined (result of expression xmlLoad) is not object.

tu peux confirmer?
cassyb a écrit :
leur code comme celui de ta reference ont pas l'air d'être compatible avec Safari...

Ah oui, il me semble bien en effet. Dans ce cas, il vaut peut-être mieux se tourner vers XMLHttpRequest.