j'ai l'impression que tu utilises un parseur HTML pour FF, tu as essayé oCodeRetour.innerHTML ?
06 juin 2008 à 11:06
Pour firefox si tu n'utilise pas l'objet innerHTML cela ne peux pas fonctionner.
06 juin 2008 à 11:12
Akshell a écrit
tu pourais mettre un exemple de réponse envoyé ?
req.responseText contient cela :
Spoiler : afficher/masquer
<?xml version='1.0' encoding='ISO-8859-1'?><LISTECD>
<CODERETOUR>OK</CODERETOUR><LIBELLERETOUR>OK</LIBELLERETOUR>
<CD INDEX="1">
<CODECLI>00</CODECLI>
<NOMCLI>Mory</NOMCLI>
<NBCD>4</NBCD>
</CD>
<CD INDEX="2">
<CODECLI>11</CODECLI>
<NOMCLI>Dhl</NOMCLI>
<NBCD>1</NBCD>
</CD>
<CD INDEX="3">
<CODECLI>13</CODECLI>
<NOMCLI>Nfrance</NOMCLI>
<NBCD>1</NBCD>
</CD>
<CD INDEX="4">
<CODECLI>16</CODECLI>
<NOMCLI>Cat</NOMCLI>
<NBCD>1</NBCD>
</CD>
<CD INDEX="5">
<CODECLI>18</CODECLI>
<NOMCLI>Heppner</NOMCLI>
<NBCD>1</NBCD>
</CD>
<CD INDEX="6">
<CODECLI>23</CODECLI>
<NOMCLI>Bmv</NOMCLI>
<NBCD>7</NBCD>
</CD>
<CD INDEX="7">
<CODECLI>27</CODECLI>
<NOMCLI>Abx</NOMCLI>
<NBCD>1</NBCD>
</CD>
<CD INDEX="8">
<CODECLI>29</CODECLI>
<NOMCLI>Sernam</NOMCLI>
<NBCD>3</NBCD>
</CD>
<CD INDEX="9">
<CODECLI>36</CODECLI>
<NOMCLI>Martelet</NOMCLI>
<NBCD>1</NBCD>
</CD>
<CD INDEX="10">
<CODECLI>38</CODECLI>
<NOMCLI>Speed</NOMCLI>
<NBCD>2</NBCD>
</CD>
<CD INDEX="11">
<CODECLI>41</CODECLI>
<NOMCLI>Nacex</NOMCLI>
<NBCD>5</NBCD>
</CD>
<CD INDEX="12">
<CODECLI>43</CODECLI>
<NOMCLI>Lomatrans</NOMCLI>
<NBCD>1</NBCD>
</CD>
<CD INDEX="13">
<CODECLI>44</CODECLI>
<NOMCLI>Cims</NOMCLI>
<NBCD>301</NBCD>
</CD>
<CD INDEX="14">
<CODECLI>49</CODECLI>
<NOMCLI>Satas</NOMCLI>
<NBCD>5</NBCD>
</CD>
<CD INDEX="15">
<CODECLI>50</CODECLI>
<NOMCLI>Calber</NOMCLI>
<NBCD>4</NBCD>
</CD>
<CD INDEX="16">
<CODECLI>51</CODECLI>
<NOMCLI>Datway</NOMCLI>
<NBCD>1</NBCD>
</CD>
<CD INDEX="17">
<CODECLI>63</CODECLI>
<NOMCLI>Fce</NOMCLI>
<NBCD>2</NBCD>
</CD>
<CD INDEX="18">
<CODECLI>70</CODECLI>
<NOMCLI>Stg</NOMCLI>
<NBCD>1</NBCD>
</CD>
<CD INDEX="19">
<CODECLI>74</CODECLI>
<NOMCLI>Tendron</NOMCLI>
<NBCD>2</NBCD>
</CD>
<CD INDEX="20">
<CODECLI>75</CODECLI>
<NOMCLI>Bpack</NOMCLI>
<NBCD>1</NBCD>
</CD>
<CD INDEX="21">
<CODECLI>79</CODECLI>
<NOMCLI>Zust</NOMCLI>
<NBCD>1</NBCD>
</CD>
<CD INDEX="22">
<CODECLI>83</CODECLI>
<NOMCLI>Prudent</NOMCLI>
<NBCD>1</NBCD>
</CD>
<CD INDEX="23">
<CODECLI>84</CODECLI>
<NOMCLI>Jammet</NOMCLI>
<NBCD>2</NBCD>
</CD>
<CD INDEX="24">
<CODECLI>95</CODECLI>
<NOMCLI>Nif</NOMCLI>
<NBCD>2</NBCD>
</CD>
</LISTECD>
(faire "citer" pour voir :)
Dernière modification le 06/06/08 à 11:16 par LeChat
06 juin 2008 à 11:15
J'ai remplacé "oCodeRetour.item(0).text" par "oCodeRetour[0].childNodes[0].nodeValue" et ça a l'air mieux.
(ce doit être l'équivalent de ce que dit CaptNCook)
06 juin 2008 à 11:24
C'est pas gagné :
117
118 // Si le code de retour n'est pas "OK" on affiche le libellé de l'erreur.
119
120 if( oCodeRetour[0].childNodes[0].nodeValue != "OK" )
121 {
122 oLibelleRetour = ret.getElementsByTagName("LIBELLERETOUR");
123 }
124 else
125 {
126 // Si la réponse est "OK on parcours et insère les réponses dans une liste.
127
128 // Récupération du nombre de réponses = nombre de fils de LISTECD moins 2 : CODERETOUR et LIBELLERETOUR
129
130 oListeCD = ret.getElementsByTagName("LISTECD");
131 iNbRep = oListeCD[0].childNodes.length;
132 alert( "iNbRep : " + iNbRep );
133 document.forms["BILAN"].BilanClient.options.length = 0;
134 document.forms["BILAN"].ListeCD.options.length = 0;
135
136 // Récupération des différentes réponses
137
138 for( i=0 ; i < (iNbRep - 2) ; i++ )
139 {
140 szCodeCli = ret.getElementsByTagName("CODECLI").item(i).text;
141 szNomCli = ret.getElementsByTagName("NOMCLI").item(i).text;
142 szNbCd = ret.getElementsByTagName("NBCD").item(i).text;
iNbRep vaut 26 pour IE et 52 pour FF !
06 juin 2008 à 11:28
Bon, je ne sais pas comment je vais gérer le problème du iNbRep mais en tout cas ça marche.
Merci à tous.
J'ai aussi converti ces lignes
140 szCodeCli = ret.getElementsByTagName("CODECLI").item(i).text;
141 szNomCli = ret.getElementsByTagName("NOMCLI").item(i).text;
142 szNbCd = ret.getElementsByTagName("NBCD").item(i).text;
en
144 szCodeCli = ret.getElementsByTagName("CODECLI")[i].childNodes[0].nodeValue;
145 szNomCli = ret.getElementsByTagName("NOMCLI")[i].childNodes[0].nodeValue;
146 szNbCd = ret.getElementsByTagName("NBCD")[i].childNodes[0].nodeValue;
Dernière modification le 06/06/08 à 11:41 par LeChat
06 juin 2008 à 11:41
chez moi iNbRep vaut 26 pour les deux, donc a priori par de problème, ensuite tes deux premiers items sont CODERETOUR, LIBELLERETOUR
donc soit tu utilises getElementsByTagName soit tu commences ta boucle a partir du troisième item.
for( i=2 ; i < iNbRep ; i++ )
06 juin 2008 à 11:45
CaptNCook a écrit
et ret.getElementsByTagName("CD").length ?
Bisous :)
06 juin 2008 à 11:45
Akshell a écrit
chez moi iNbRep vaut 26 pour les deux, donc a priori par de problème, ensuite tes deux premiers items sont CODERETOUR, LIBELLERETOUR
donc soit tu utilises getElementsByTagName soit tu commences ta boucle a partir du troisième item.
for( i=2 ; i < iNbRep ; i++ )
Apparemment ça fonctionne avec ma boucle "for( i=0 ; i < (iNbRep - 2) ; i++ )"
Par contre, je ne comprends pas pourquoi tu as la même valeur pour les deux et pas moi !
06 juin 2008 à 11:48
tu peux même faire :
var cd = ret.getElementsByTagName("CD");
var codecli = ret.getElementsByTagName("CODECLI");
var nomcli = ret.getElementsByTagName("NOMCLI")
var nbcd= ret.getElementsByTagName("NBCD")
if(cd.length>0) {
for(i in cd) {
szCodeCli = codecli[i].childNodes[0].nodeValue;
szNomCli = nomcli[i].childNodes[0].nodeValue;
szNbCd = nbcd[i].childNodes[0].nodeValue;
}
}
else {
//rien
}
06 juin 2008 à 11:56
Tant que je vous tiens (ou pas), vous avez une idée pour aligner des valeurs à afficher dans un "select" ?
Actuellement je fais comme ça (je sais c'est pas beau) :
154 oNouv = new Option( " " + szCodeCli + " " + szNbCd + szBuf + " " + szNomCli, szCodeCli, false, false);
155 document.forms["BILAN"].BilanClient.options[i] = oNouv;
Ca marche sous IE (à peu près aligné) mais pas sous FF (il ne considère qu'un espace).
06 juin 2008 à 11:56
CaptNCook a écrit
tu peux même faire :
var cd = ret.getElementsByTagName("CD"); var codecli = ret.getElementsByTagName("CODECLI"); var nomcli = ret.getElementsByTagName("NOMCLI") var nbcd= ret.getElementsByTagName("NBCD") if(cd.length>0) { for(i in cd) { szCodeCli = codecli[i].childNodes[0].nodeValue; szNomCli = nomcli[i].childNodes[0].nodeValue; szNbCd = nbcd[i].childNodes[0].nodeValue; } } else { //rien }
Ah oui, c'est plus joli (et plus propre).
/me Léchouille CaptNCook
06 juin 2008 à 11:58
Bon, conservatoire time. Je finirai lundi.
Merci encore à tous o/
06 juin 2008 à 12:04
si c'est juste pour faire un select au final, tu as autocomplete basé sur scriptaculous/prototype
url : http://blog.pascal-martin.fr/post/Scriptaculous-Ajax.Autompleter-suggestions-pour-la-saisie-dune-ville
06 juin 2008 à 12:12
Quand un nœud contient un texte trop long, il répartit le texte sur plusieurs sous nœud. Donc, il faut faire :
longtexte = xml.getElementsByTagName('longtexte').childNodes;
for(i in longtexte) {
if(longtexte[i].nodeValue != null)
document.getElementById('longtexte').innerHTML += longtexte[i].nodeValue;
}
24 juin 2008 à 13:33
Tu mets ça pour un cas que je pourrais avoir ou juste pour info ?
(en tout cas, merci de l'info :)
24 juin 2008 à 14:38
Pour ton histoire d'espaces tu peux mettre des nbsp; à la place des espaces.
24 juin 2008 à 15:05
ma solution avec autocomplete tu peux mettre ce que tu veux, même des tableaux, tant que chaque ligne de données est bien un <li>
24 juin 2008 à 17:41
Répondre au sujet
Vous devez être identifié pour participer à ce topic.
Nicolas le jardinier