Salut. Je voudrais réaliser un dictionnaire avec AJAX mais lorsque j'essaie de récupérer le contenu du fichier XML, rien ne se passe. dico.htm
<script type="text/javascript" src="getxhr.js"></script>
<script type="text/javascript">
function request() {
var xhr = getXMLHttpRequest();
if (xhr == null)
alert("Votre navigateur ne supporte pas l'objet XMLHTTP !");
else
{
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (xhr.status == 200 || xhr.status == 0) {
var xmlDoc = xhr.responseXML;
alert("OK");
alert(xmlDoc.getElementsByTagName("mot")[0].firstChild.nodeValue); //Problème à ce niveau
}
else
alert("Problème lors de la réception des données !");
}
};
xhr.open("GET", "dico.xml", true);
xhr.send(null);
}
}
</script>
Le "OK" s'affiche mais dès que j'essaie d'afficher le contenu du fichier XML, rien ne se passe (testé sous firefox et IE). dico.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<dictionnaire>
<terme>
<mot>Amorce</mot>
<definition>Programme généralement stocké en mémoire morte et destiné à assurer le démarrage d'un ordinateur.</definition>
</terme>
<terme>
<mot>API</mot>
<definition>(Application Programming Interface) Interface de programmation. C'est un ensemble de fonctions, procédures, ou classes mises à disposition des programmes informatiques par une bibliothèque logicielle, un système d'exploitation ou un service.</definition>
</terme>
<terme>
<mot>Application</mot>
<definition>Programme ou ensemble de programmes destiné à aider l'utilisateur d'un ordinateur pour le traitement d'une tâche précise.</definition>
</terme>
</dictionnaire>
alert(xmlDoc.getElementsByTagName("mot")[0].firstChild.nodeValue);
donc... vire le "firstchild" et ça devrait t'afficher "amorce"...
gebtn("mot") te récupère le noeud "mot" pas besoin de prendre son premier enfant, il en a pas
Bon, le DOM, parlons-en.
Prenons ta ligne de code : alert(xmlDoc.getElementsByTagName("mot")[0].firstChild.nodeValue);
xmlDoc, c'est l'équivalent de ton document.
getElementsByTagName("mot") te récupère tous les noeud "mot" de ton document.
[0] choisit le premier noeud "mot".
firstChild prend l'enfant du premier noeud mot... y en a pas, si ?
nodeValue, d'accord, récupère le texte du noeud mot...
Si tu vires "firstChild", tu auras le texte de ton mot, je me trompe ?
Ah en effet... j'utilise plutôt getChildText en général...
Mais dans ton cas, ça devrait afficher "Amorce" et non, "Programme généralement..."
Puisqu'on prend le noeud mot.
Sinon, si tu alert simplement xmlDoc, ça affiche quoi ?
Oui. J'ai essayé d'exécuter un script que j'ai pris sur le net et qui a les mêmes caractéristiques et ça passe sans problème. Les différences entre ce script et le mien c'est qu'aucun code javascript n'est inclus directement dans le fichier HTML. L'inclusion se fait par
<script type="text/javascript" src=""></script>
et au lieu d'un bouton, c'est quand on clique sur un lien que la fonction qui envoie la requête est appelée.
Mon problème est résolu avec Firefox. Je crois que le problème était dû à la présence de la balise "form" dans le fichier HTML. Mais avec IE 6, lorsque j'exécute ce code
var xmlDoc = xhr.responseXML;
var xmlMot = xmlDoc.getElementsByTagName('mot');
alert(xmlMot.length);
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
et au lieu d'un bouton, c'est quand on clique sur un lien que la fonction qui envoie la requête est appelée.