Yoanned
Messages postés4Date d'inscriptionvendredi 9 novembre 2007StatutMembreDernière intervention12 novembre 2007
-
9 nov. 2007 à 10:49
Yoanned
Messages postés4Date d'inscriptionvendredi 9 novembre 2007StatutMembreDernière intervention12 novembre 2007
-
12 nov. 2007 à 10:37
Bonjour à tous !
Je suis débutant en Javacript, et je m'arrache les cheveux sur un problème que je ne sais pas résoudre...
J'essaie de récupérer des informations depuis un fichier XML distant, et de les placer dans une liste déroulante ; ce que je suis arrivé à mettre en place avec XmlHttpRequest en récupérant des morceaux de code à gauche à droite. Pour faire simple et pour tester déjà, j'ai fait sur ma page HTML un tableau de deux cellules, avec dans la cellule de gauche un simple texte, et dans la cellule de droite mon résultat de fonction Javascript, c'est à dire ma liste déroulante.
Seulement, j'ai un problème "d'affichage". Lorsque je charge ma page, je tombe tout d'abord sur mon tableau, mais sans la liste déroulante, ce qui me semble normal puisque la fonction n'a pas encore renvoyé le résultat. Puis, au bout d'une demi-seconde, ma page se recharge... et je n'ai plus que ma liste déroulante.
Vous en conviendrez donc que si mon code Javascript efface le reste de la page, cela va poser un problème !
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
// Firefox, Safari, ...
} else if (window.ActiveXObject) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
// Internet Explorer
} else {
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
xhr = false;
}
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if(xhr.status == 200) {
var doc = xhr.responseXML;
document.write("<select>");
for (i=1; i<=50; i++){
var element = doc.getElementsByTagName('TRUCS').item(i);
document.write("<option value='"+element.firstChild.data+"'>"+element.firstChild.data+"</option>");
}
document.write("</select>");
} else {
Liste de TRUCS :,
<script>window.onLoad(submitForm());</script>,
</html>
Voilà donc ce code qui me fait désespérer...
En espérant que tout ceci vous inspire plus que moi, je vous remercie beaucoup de votre attention et de vos éventuelles réponses !
Yoanned
Messages postés4Date d'inscriptionvendredi 9 novembre 2007StatutMembreDernière intervention12 novembre 2007 12 nov. 2007 à 10:37
J'ai résolu mon problème !
Et ce de la manière suivante :
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if(xhr.status
== 200) {
var doc = xhr.responseXML;
var test = doc.getElementsByTagName('trucs').length
for (i=0; i<=test-1; i++){
var element = doc.getElementsByTagName('trucs').item(i); //Ici, truc est la valeur du nœud dans le fichier XML
document.getElementById("toto").options[i] = new Option(element.firstChild.data, element.firstChild.data);
//document.getElementById("toto").add(new Option(element.firstChild.data,element.firstChild.data)); -->
}
} else {
alert("erreur");
}
}
}
PetoleTeam
Messages postés3426Date d'inscriptionlundi 26 décembre 2005StatutMembreDernière intervention14 janvier 201117 9 nov. 2007 à 12:27
Bonjour,
Normal... il ne faut pas utiliser document.write qui clear le contenu du document, mais écrire ton résultat dans un div par exemple avec innerHTML
Yoanned
Messages postés4Date d'inscriptionvendredi 9 novembre 2007StatutMembreDernière intervention12 novembre 2007 9 nov. 2007 à 13:43
Bonjour PetroleTeam !
J'ai essayé de mettre en place la solution en innerHTML de la manière suivante :
(...)
var doc = xhr.responseXML;
output.innerHTML = "<select><option>--- Vide ---</option>";
for (i=1; i<=50; i++){
var element = doc.getElementsByTagName('region').item(i);
output.innerHTML+="<optionvalue='"+element.firstChild.data+"'>"+element.firstChild.data+"</option>";
}
output.innerHTML+="</select>";
(...)
Et plus loin, entre les balises BODY :
(...)
----
Résultat de TRUCS :,
<script>window.onLoad(submitForm());</script>
,
(...)
Donc tout ceci m'affiche bien mon SELECT avec à l'intérieur ma ligne "--- Vide ---"... mais uniquement cela ! Et juste à côté j'ai la liste de mes résultats qui auraient dû être dans le SELECT, mais au format texte en ligne, comme entre balises
.
Ais-je fais uen bétise dans le innerHTML, ou est-ce finalement une mauvaise piste ?
PetoleTeam
Messages postés3426Date d'inscriptionlundi 26 décembre 2005StatutMembreDernière intervention14 janvier 201117 9 nov. 2007 à 15:20
Peut être avec cela...
(...)
var doc = xhr.responseXML;
var Html = "<select><option>--- Vide ---</option>";
var O_Region = doc.getElementsByTagName('region');
for (i=1; i<=50; i++){
var element = O_Region.item(i); Html +"< option <gras>value</gras>'" +element.firstChild.data +"'>" +element.firstChild.data +"</option>";
}
//-- pour plus de compatibilite
document.getElementById( 'output').innerHTML = Html;
(...)
;0)
Vous n’avez pas trouvé la réponse que vous recherchez ?