XML, DOM et AJAX

Traitement d'un fichier XML avec AJAX

L'avantage du XML est la structuration des données et la facilité de traitement de celles-ci. L’inconvénient est le poids du format de balisage qui peut atteindre jusqu'à plus de deux fois le poids des données seules.

Le traitement du XML se fait via l'objet DOM de Javascript et de ses méthodes. Je vous renvoie à la documentation de l'API DOM de Javascript pour en apprendre plus à ce sujet.

Reprenons l'exemple précédent, sauf qu'ici nous appelons un fichier XML contenant une liste de 3 noeuds, et non un fichier PHP.

Nous créons donc une fonction Javascript spécifique dont le rôle est de lire le résultat XML, d'en extraire la valeur du premier noeud, et d'afficher cette valeur dans un élément HTML.

Lorsque l'on doit récupérer une réponse de type XML, l'objet XMLHttpRequest propose une propriété .responseXML permettant de récupérer directement un objet DOM, facilitant ainsi le traitement.

Fichier XML

/*** Fichier XML (file.xml) ***/

<?xml version="1.0" ?>
<data>
<text_1>Hello World!</text_1>
<text_2>Hello Foobar!</text_2>
<text_3>Hello John Doe!</text_3>
</data>

 

Fichier HTML

/*** HTML ***/

<div id="ajaxBox"></div>

 

Fichier JAVASCRIPT

/*** Javascript ***/

// Au chargement de la page, déclencher la fonction ajaxBox_update()
window.onload = ajaxBox_update;

// Fonction effectuant la requête AJAX
function ajaxBox_update()
{
// Récupération de l'objet XHR
var xhr = getXhr();

// On assigne une fonction qui, lorsque l'état de la requête change, va traiter le résultat
xhr.onreadystatechange = function()
{
// readyState 4 = requête terminée
if (xhr.readyState == 4)
{
// status 200 = page requêtée trouvée
if (xhr.status == 200)
ajaxBox_parseXml(xhr.responseXML); // Traitement XML
// Page non trouvée
else
ajaxBox_setText('Error...');
}
};

// Préparation de la requête
var url = 'http://site.com/file.xml';
xhr.open('GET', url, true);

// Execution de la requête
xhr.send(null);
}




// Fonction de traitement des données XML retournées
// Récupère le noeud XML /data/texte_1
function ajaxBox_parseXml(pXml)
{
var dataNode = pXml.getElementsByTagName('data').item(0);
var textNode = dataNode.getElementsByTagName('text_1').item(0);
ajaxBox_setText(textNode.firstChild.data);
}

// Fonction de mise à jour du contenu de la div #ajaxBox
// Ajout d'un element <p> contenant le message, dans le div #ajaxBox
function ajaxBox_setText(pText)
{
var elt = document.getElementById('ajaxBox');
var p = elt.appendChild(document.createElement('p'));
p.appendChild(document.createTextNode(pText));
}

 

A propos de l'auteur

Antoine Beaumont

Antoine Beaumont est Consultant Web et Développeur. Fort d'une expérience construite au sein de grandes agences Web-marketing, pour tous types de comptes, il accompagne désormais les professionnels dans leurs projets Web, de façon souple et objective.