Forum de discussion
Forum « Programmation Javascript » (archives)
Re: XML et javascript (Ajax)
Envoyé: 16 septembre 2005, 8h54 par Oznog
C'est effectivement possible depuis peut. On dit Ajax (Asynchronous JavaScript and XML). Asynchronous parceque cette technique permet de communiquer avec le serveur sans recharger la page.
Tout tourne autour de l'ouverture du document XML. Il suffit de donner le URL. Mais imagine effectuer l'opération après un "onclick" par exemple? Ça cause toute sorte de problèmes de sécurités notament au niveau des informations personnelles.
Donc, même si cette technique attendue est très puissante, on bloque encore les flux (streams) XML des serveurs distants. Alors l'intérêt en prend pour son rhume. Sinon, si ton XML est sur le même serveur ça fonctionne.
Maintenant Le magazine "Affaire" peut bien parler de solutions "simple" et "gratuites", c'est pas si simple que ça, justement quand tu veux manipuler les données.
1. Pour charger le XML et avoir sous la main des dizaines d'outils pour naviguer et manipuler l'arboressance tu dois utiliser deux objets. L'ActiveX "Microsoft.XMLDOM" pour IE et le nouveau "XMLHttpRequest" pour les autres.
var oXMLFlux = new XMLHttpRequest();
oXMLFlux.open("GET", "page.xsl", false);
oXMLFlux.send(null);
C'est tout. oXMLFlux contient tout le document et sa structure DOM.
Par exemple :
// Tout le code XML brut du document (comme copy en XSLT).
oXMLFlux.responseXML;
// Seulement contenu du document
oXMLFlux.responseText;
// Or donc
document.getElementById("unCalqueExemple").innerHTML = oXMLFlux.responseText;
Il y a aussi par exemple "getAllResponseHeaders" pour récupérer seulement l'en-tête http. Le "readyState" qui indique l'état de la connexion. Et même lui appliquer une transformation XSL avec "transformToFragment" (je n'ai jamais personnellement résusis, sans doute encore pour des raisons de sécurité) Etc etc...
Exemple à lire sur XML.com (http://www.xml.com/pub/a/2005/02/09/xml-http-request.html)
function loadXMLDoc(url)
{
// branch for native XMLHttpRequest object
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.send(null);
// branch for IE/Windows ActiveX version
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.send();
}
}
}
function processReqChange()
{
// only if req shows "complete"
if (req.readyState == 4) {
// only if "OK"
if (req.status == 200) {
// ...processing statements go here...
} else {
alert("There was a problem retrieving
the XML data:\n" + req.statusText);
}
}
}
2. Toi tu veux en plus naviguer et tester le nom et les valeurs des noeuds. La chose se complique. Un exemple passe toujours mais pour créer son code à partir d'une idée n'est pas à la porté de tous. tu as déjà une bonne introduction. Ensuite, sache que peut importe la technique d'ouverture, le résultat XML reste un document qui respecte la hiérarchie du DOM (XML DOM). Voir une bonne référence sur DevGuru "XMLDOM Quick Reference " (http://www.devguru.com/Technologies/xmldom/quickref/xmldom_intro.html).
Dans ton cas tu devra sans doute boucler le document, exemple simple :
for each oNoeud in oXMLFlux.documentElement.childNodes
document.write(oNoeud.nodename)
document.write(':'+oNoeud.text+'<br >')
next
Etc, etc,etc.
C'est déjà ça, bonne chance.
ciao
Oznog
Réponses
|