Ah oui... c'est vrai, AJAX ^^
utilise responseText plutôt que responseXML
et le résultat n'est pas dans une variable globale, c'est le retour de la fonction
Ah oui... c'est vrai, AJAX ^^
utilise responseText plutôt que responseXML
et le résultat n'est pas dans une variable globale, c'est le retour de la fonction
Bien alors j'ai essayer ceci:
Mais ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" target="_blank">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>"> <html xmlns="<a href="http://www.w3.org/1999/xhtml" target="_blank">http://www.w3.org/1999/xhtml</a>"> <head> <title>Liste des commandes</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <script language="JavaScript"> function getXhr(){ if(window.XMLHttpRequest) // Firefox et autres xhr = new XMLHttpRequest(); else if(window.ActiveXObject){ // Internet Explorer try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } } else { // XMLHttpRequest non supporté par le navigateur alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); xhr = false; } } function xmltxt(){ getXhr(); xhr.onreadystatechange = function(){ if(xhr.readyState == 4 && xhr.status == 200){ XML = xhr.responseText.substring(xhr.responseText.lastIndexOf('?>') + 2) alert(XML); var autor = "Voltaire"; var DOM_XML = document.createElement('div'); DOM_XML.innerHTML = XML; var autors = DOM_XML.getElementsByTagName('livres'); var results = new Array(); for(var i = 0; i < autors.length; ++i) if(autors[i].getAttribute('auteur') == autor) { var livres = autors[i].getElementsByTagName('livre'); for(var j = 0; j < livres.length; ++j) result.push(livres[i].innerHTML); } alert(result); } } xhr.open("GET", "livre.xml", true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.send(null); } </script> </head> <body onLoad="xmltxt();"> </body> </html>
ne marche pas. Ca me dit que result est indefini.
Code : Sélectionner tout - Visualiser dans une fenêtre à part alert(result);
Ok j'ai corrigé plus d'erreur mais rien dans result! Vide, comment ca se fait?
Et puis j'ai une erreur sur la fonction donnée:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 function getLivre(var XML, var autor) { var DOM_XML = document.createElement('div'); DOM_XML.innerHTML = XML; var autors = DOM_XML.getElementsByTagName('livres'); var result = new Array(); for(var i = 0; i < autors.length; ++i) if(autors[i].getAttribute('auteur') == autor) { var livres = autors[i].getElementsByTagName('livre'); for(var j = 0; j < livres.length; ++j) result.push(livres[i].innerHTML); } return result; }Erreur : missing formal parameter
Code : Sélectionner tout - Visualiser dans une fenêtre à part getLivre(XML,'Voltaire');
Fichier source : http://127.0.0.1/ajax/go1.html
Ligne : 39, Colonne : 18
Code source :
function getLivre(var XML, var autor)
Et ligne 39 c'est ca: function getLivre(var XML, var autor)
Chez moi ça marche (sauf qu'il me met deux fois Candide)
il faut juste modifier ceci :en ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part result.push(livres[i].innerHTML);et les deux titres sont différents...
Code : Sélectionner tout - Visualiser dans une fenêtre à part result.push(livres[j].innerHTML);
ci-joint le document où ça marche (sauf que je n'utilse AJAX... mais comme tu le verras, ça revient au même )
Ben cher moi ca me met bien le contenu du xml, mais apres rien , le deuxieme alert est vide :'(, j'utilis IE car je vien de voir que sous Firefox ca marchait mais alors pourquoi pas sous IE?
laisse moi deviner... tu es sous Internet Explorer ?
Il bug :tu devrais vite comprendre ^^
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 DOM_XML.innerHTML = XML; alert(XML); alert(DOM_XML.innerHTML);
Ben comment faire alors?
Ya une solution? On peut y faire quelque chose ou c'est encore une deception du XML avant que j'aille au lit?
IE plante, on n'y peut absoluement rien à part attendre la prochaine version (peut-être) désolé...
C'est bon j'ai reussi . En utilisant la reponseXML ca marche super!!
Mais je revient a ma premiere question, en faite on ne peut pas vraiment faire un pareser "universel", il faut connaitre la structure du XML avant non?
Il faut tout de meme au moins connaitre la profondeur du noeud contenant l'information qui t'interesse. Et ceci peut effectivement changer d'un fichier xml a un autre.Envoyé par cerede2000
De plus dans le code que tu utilise tu cherche directement par nom de balise, donc effectivement il te faut connaitre la structure du fichier XML.
Amusant tout ça
Bon, après tout je n'utilise ce type de traitement que tous les jours mais si mon avis interesse:
Pour retrouver un element dans un xml je n'utilise jamais tout ce fourbi, il me suffit de connaitre xpath (ce qui permet parfois aussi de ne pas avoir besoin de connaitre la structure exacte du xml).
Pour IE instruction selectnodes (attention il y a un setproperty a initialisé a la bonne valeur)
Pour mozilla/firefox fonction document.evaluate
Pour rentrer une "chaine string" dans un document xml
IE propriété loadxml
Mozilla/firefox creer un "new DOMparser()" (ou un truc du style, je l'utilise moins pas ma doc sous les yeux)
etc...
Hum tu pourrai me mettre ton code ou me l'envoyer par MP s'il te plait?
Merci .
J'attent une reponse de Erwy et je mettrai resolu apres!
Mozilla
document.evaluate(.....) > http://www-xray.ast.cam.ac.uk/~jgrah...-tutorial.html
parser une string > http://www.faqts.com/knowledge_base/.../15302/fid/616
IE
selectnodes http://msdn.microsoft.com/library/de...dfda28f98d.asp
loadxml http://msdn.microsoft.com/library/de...2b692b0afc.asp
Tuto xpath
http://jerome.developpez.com/xmlxsl/xpath/
Ce post est très intéressant, vraiment.
J'avoue avoir apris des choses qui me sont très utiles !
Je pense même que ca mériterait de se retrouver dans la FAQ...
Erwy ton systeme est interessant mais seulement il oblige a faire des tests pour differencier le navigateur! Et ne plus qu'en est il des autres style opera ou autre?
Moi mon systeme est simple marche partout et vu que je connais ma structure XML c'est niquel.
Merci quand meme
Envoyé par cerede2000
Envoyé par cerede2000
Oui mais la c'est un petit bout de code tres tres minime! Et si on ne le met pas ca ne fonctionne pas!
Alors que la mon code marche pour tous sans probleme !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager