au fait, quelle est la difference entre res = xhr.responseXML.documentElement et res = xhr.responseXML ??
au fait, quelle est la difference entre res = xhr.responseXML.documentElement et res = xhr.responseXML ??
xhr.responseXML te renvoies l'objet qui représente l'arbre xml et xhr.responseXML.documentElement te renvoies le noeud racine de cet arbre.au fait, quelle est la difference entre res = xhr.responseXML.documentElement et res = xhr.responseXML ??
Le plus simple est la première solution que je t'ai proposé.svp, quel est le moyen le plus simple pour pouvoir afficher les info depuis le fichier xml, sachant que je ne suis pas un pro et que ca doit etre dynamique, car je n'est pas toujours que le titre en et fr, et qu'il peut y avoir 1 ou n auteurs...
Pour récupérer tous tes auteurs tu fais un getElementsByTagName("nom") et tu boucles sur la liste que tu récupères pour les afficher.
Pour récupérer tous tes titres, tu boucles sur les childNodes du noeud titre en vérifiant que ces noeuds ne sont pas des noeuds textes (car comme spaffy te l'as dit plus haut, FF trouvera des noeuds textes vides alors qu'IE non)
Dans mon quoi, que dois je utiliser?xhr.responseXML te renvoies l'objet qui représente l'arbre xml et xhr.responseXML.documentElement te renvoies le noeud racine de cet arbre
voici un exemple tres courant de ce que je peux obtenir ds le fichier xml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <article> <titres> <en>titre en</en> <fr>titre fr</fr> <es>titre es</es> </titres> <auteurs> <nom>auteur 1</nom> <nom>auteur 2</nom> </auteurs> </article>J'ai un peu de mal a copmprendre, pourras tu stp me donner un exemple concret des boucles??Pour récupérer tous tes auteurs tu fais un getElementsByTagName("nom") et tu boucles sur la liste que tu récupères pour les afficher.
Pour récupérer tous tes titres, tu boucles sur les childNodes du noeud titre en vérifiant que ces noeuds ne sont pas des noeuds textes (car comme spaffy te l'as dit plus haut, FF trouvera des noeuds textes vides alors qu'IE non)
Merci encore une fois
Ca te sera surement plus profitable si tu reprenais au calme la manipulation du DOM depuis les bases
Par exemple, tu peux commencer ici.
c cool, j'ai reussi pour les auteurs:
cela te parait correcte??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 nbr = response.getElementsByTagName("auteurs")[0].childNodes.length; html += "Auteur(s) : "; for(i = 0; i < nbr; i++) { html += response.getElementsByTagName("nom")[i].firstChild.nodeValue; if(i < nbr - 1) html += ", "; }
mais par contre je seche pour les titres![]()
pour demarrer, je fais unet il m'affiche NULL
Code : Sélectionner tout - Visualiser dans une fenêtre à part alert(response.getElementsByTagName("titles")[0].childNodes[0].nodeValue);
par contre si je faisil m'affiche bien 'en'
Code : Sélectionner tout - Visualiser dans une fenêtre à part alert(response.getElementsByTagName("titles")[0].childNodes[0].nodeName);
un petit coup de main ???![]()
Attention à ca, suivant le navigateur tu n'auras pas le meme nombre. Le mieux est de faire directement nbr = response.getElementsByTagName("nom").length
Code : Sélectionner tout - Visualiser dans une fenêtre à part nbr = response.getElementsByTagName("auteurs")[0].childNodes.length
Essaie en utilisant .data au lieu de .nodeValueCode :
alert(response.getElementsByTagName("titles")[0].childNodes[0].nodeName);
il m'affiche bien 'en'
un petit coup de main ???
OK, merciAttention à ca, suivant le navigateur tu n'auras pas le meme nombre. Le mieux est de faire directement nbr = response.getElementsByTagName("nom").length
je devais mettreEssaie en utilisant .data au lieu de .nodeValueau lieu de
Code : Sélectionner tout - Visualiser dans une fenêtre à part response.getElementsByTagName("titres")[0].childNodes[0].firstChild.nodeValueet la, le tout marche bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part response.getElementsByTagName("titres")[0].childNodes[0].nodeValue![]()
une petite precision:
concretement, qu'elle est la difference? ds mon script je l'ai pas mis, qu'est ce que ca aurait change si je l'avais mis?xhr.responseXML te renvoies l'objet qui représente l'arbre xml et xhr.responseXML.documentElement te renvoies le noeud racine de cet arbre.
Bonjour, je reviens encore vers vous car j'ai encore un tout petit souci
ma requete ajax ne focntionne pas bien lorsque j'ai des resultats avec des ' ou ", savez vous comment palier a ce probleme?
voici un bout de mon code :
et mon fichier php est le suivant:
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 function xhr_search_article(val1, val2, val3) { if(val1 && val1.length > 3) { var xhr = (window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(); // IE else Ff, Mozilla... xhr.onreadystatechange = function() { if(xhr.readyState == 4) { if(xhr.status == 200) { var val_final = "<table width='100%' border='0' cellpadding='0' cellspacing='0'>"; val_final += "<tr><td height='20' valign='top' align='right' colspan='2'><b><a href='javascript:;' onClick=\"open_close('" + val3 + "');\" title='Fermer'><span class='red'>x</span></a></b></td></tr>"; if(xhr.responseText != "") { var lines = xhr.responseText.split('\n'); for (var i = 0; i < lines.length; i++) { var line = lines[i].split('~'); for (var j = 0; j < 2; j++) { val_final += "<tr><td hight='16' width='258'><a href='javascript:;' class='linkMenu1' onClick=\"document.getElementById('" + val2 + "').value = '" + line[1] + "'; open_close('" + val3 + "');\">" + line[1] + "</a></td><td align='right' width='12'><a href='javascript:;' onClick=\"xhr_preview_article(" + line[0] + ", '" + line[1] + "'); open_close('" + val3 + "');\"><img src='../../img/loupe.gif' width='12' border='0'></a></td></tr>"; break; } } } val_final += "</table>"; document.getElementById(val3).style.display = ''; document.getElementById(val3).innerHTML = val_final; } else document.getElementById(val3).innerHTML = "Error code: " + xhr.status; } }; //Open the file, POST method xhr.open("POST", "/admin/fridoc/articles/xhr_search_article.php?title=" + val1, true); xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); xhr.send(); } else document.getElementById(val3).style.display = 'none'; }
Merci encore une fois
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 $sel = mysql_query("SELECT id_article, titre FROM ..."); mysql_close($con); $num = mysql_num_rows($sel); $i = 1; while($res = mysql_fetch_array($sel)) { $results .= "$res[id_article]~$res[title]"; if($i++ < $num) $results .= "\n"; } echo $results;
Tu peux nous montre un exemple de ce que tu reçois et de ce que tu aimerais recevoir ?
Il faudrat :
les enlever avec une regExp ?
paramétrer ta table pour le ne pas avoir les quotyes ?
j'ai mis un echo addslashes($results); ds le fichier PHP mais ca regle pas le probleme.
lorsque je commence a saisir pour afficher les resultats generes par ajax, j'ai un message d'erreur internet explorer : Constante chaine non terminee
l'erreur vien de cette ligne:
et c'est le premier line[1] qui bloque. la valeur de line[1] ds mon exemple est: test titre' " ) ( &
Code : Sélectionner tout - Visualiser dans une fenêtre à part val_final += "<tr><td hight='16' width='258'><a href='javascript:;' onClick=\"document.getElementById('mon_calque').value = '" + line[1] + "';\">" + line[1] + "</a></td></tr>";
j'ai mis different caracteres speciaux pour bien tester.
ce qui bloque est le caractere " !!!
pour commencermanque un e
Code : Sélectionner tout - Visualiser dans une fenêtre à part hight='16'
mais il y a une balise a ouvrante qui manque ...???
Code : Sélectionner tout - Visualiser dans une fenêtre à part val_final += '<tr><td height="16" width="258"><a href="javascript:;" onclick="document.getElementById('mon_calque').value =\'' + line[1] + '\';">' + line[1] + '</a></td></tr>'
Petite faut d'inattentionmanque un e
Le changement entre les guillemets et cotes peux regler le probleme?mais il y a une balise a ouvrante qui manque ...???
par contre je ne vois pas trop la balise qui manque!!
dans le code fourni il y a une baliseil devrait y avoir aussi la balise ouvrante ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part </a>
dans le même conteneur... elle ne doit pas être en dehors de la balise td !!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part <a>
elle y est la balise <a>:
Code : Sélectionner tout - Visualiser dans une fenêtre à part val_final += "<tr><td hight='16' width='258'><a href='javascript:;' ...
enfin pour resumer, comment faire pour que cette syntaxe javascript soit bonne:
où val = mon' titre " foireux !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part var valeur = "<a href=\"document.getElementById('id_champ').value = '" + val + "';\">mon lien</a>"![]()
arf vaut mieux y voir comme ça que pas du tout :red:
oki pour le a ...
ton val contient des quotes ?
oui, val peut etre : l'avenir du... "21e siecle" par exempleton val contient des quotes ?![]()
fais en un html_entites en php ...
ou un escape en javascript ...
crois mois, j'y ai pense mais là, vrmt je pete un plan, ca ne marche pas:fais en un html_entites en php
je ne sais pa pk mais cette fonction php ne fonctionne pas chez moi!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <? $str = 'Un \'apostrophe\' en <strong>gras</strong>'; ou $str = "Un 'apostrophe' en <strong>gras</strong>"; // Affiche : Un 'apostrophe' en <strong>gras</strong> echo htmlentities($str, ENT_QUOTES); ?>
Comment faire ca?ou un escape en javascript
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