Impossible de parser un flux XML sous IE7

Résolu
rhan_659 Messages postés 85 Date d'inscription lundi 1 novembre 2004 Statut Membre Dernière intervention 30 juin 2011 - 11 juil. 2008 à 18:07
 sfresnel - 28 juil. 2008 à 10:36
Bonjour

je parse un flux XML, avec FF3 et I.E6 pas de souci mais avec IE 7 ça marche pas

voila le flux

<html>
<head>
</head>

azertyuiop:[AAA]:[BBB]:[CCC]

</html>

voila la ligne qui parse

return XHRequest.responseXML.documentElement.getElementsByTagName("body").item(0).firstChild.nodeValue.split(":")

sous IE7 j'ai ce message

Erreur : 'XHRequest.responseXML.documentElement' a la valeur null ou n'est pas un objet

21 réponses

nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
12 juil. 2008 à 12:33
Bon ba si ça marche comme ça c'est bien...

Par contre j'ai pas compris pourquoi tu ne peus pas utiliser php !

C'est quoi lotus note ?

a++

Si la réponse vous convient, pensez : Réponse acceptée !
3
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
11 juil. 2008 à 21:34
Salut, c'est normal, sous IE c'est un activeX et il ne s'appelle pas comme ça ...

Regarde ça :

 var xhr_object = null;
 
 if(window.XMLHttpRequest) FF
  xhr_object = new XMLHttpRequest();
 else if(window.ActiveXobject)
  xhr_object = new ActiveXobject("Microsoft.XMLHTTP"); //IE
 else{
  alert("Votre navigateur n'est pas compatible avec XMLHttpRequest");
  return;
 }

Rajoute ces ligne en changeant le nom de la variable et tu verra ça marchera !

a++

Si la réponse vous convient, pensez : Réponse acceptée !
0
rhan_659 Messages postés 85 Date d'inscription lundi 1 novembre 2004 Statut Membre Dernière intervention 30 juin 2011
12 juil. 2008 à 01:29
merci mais ça ne change rien, et le code est fonctionnelle avec ie6...

voici le code complet

   if(window.XMLHttpRequest){
      // Firefox et autres
      XHRequest = new XMLHttpRequest();
      if (XHRequest.overrideMimeType){XHRequest.overrideMimeType('text/xml')}
   }else if(window.ActiveXObject){
      // Internet Explorer
         try { XHRequest = new ActiveXObject("Msxml2.XMLHTTP");
         }
         catch(e) {XHRequest = new ActiveXObject("Microsoft.XMLHTTP");
         }
   }else{
      //non supporté par le navigateur
      alert("Ajax Error :\n XMLHttpRequest non supporté par le navigateur");
      return "";
   }

   XHRequest.open("Get", urlRequeste , false);
   XHRequest.send(null);

      //traitement uniquement si le flux XML est complètement chargé; 4 = complet"
      if (XHRequest.status == 200) {
     
      return XHRequest.responseXML.documentElement.getElementsByTagName("body").item(0).firstChild.nodeValue.split(":")
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
12 juil. 2008 à 05:27
Bonjour,

pour le xml, avec IE, il faudrait utiliser :
                            xmlD = new ActiveXObject('Microsoft.XMLDOM');
                            xmlD.async=true;
                            xmlD.onreadystatechange = function ()
                            {    if ( xmlD.readyState == 4 )
                                {    ici on traite xmlD.xml    }
                            }
attention : new XMLHttpRequest(); répond true pour IE7,                       

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
12 juil. 2008 à 06:30
j'ai oublié le                  xmlD.load(fichier);

et de dire qu'avec FF, normalement :
                xmlD = document.implementation.createDocument('','', null);
                xmlD.onload = function()   
                {    traitement de xmlD.documentElement.textContent);                   
                }
                xmlD.load(fichier);

ajax c'est pour communiquer avec le langage serveur, pas pour récupérer du xml
( même si ça baigne avec FF, avec IE je ne pense pas... peut-être me trompe-je )

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
12 juil. 2008 à 06:44
ah ben zut, je n'avais pas vu ce que tu fais voir  !!

<html>
<head>
</head>

azertyuiop:[AAA]:[BBB]:[CCC]

</html>

n'est pas un flux xml ! c'est du html !
curieux de vouloir traiter cela comme du xml ?
tu peux mettre la réponse dans un div ( caché )
et y utiliser les getElementsByTagName....

pas sûr que le traitement du xml que je proposais
fonctionne dans ce cas.   à tester ?

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
rhan_659 Messages postés 85 Date d'inscription lundi 1 novembre 2004 Statut Membre Dernière intervention 30 juin 2011
12 juil. 2008 à 11:15
je vux le traiter comme un flux xml car je ne veux récuperer que "azertyuiop:[AAA]:[BBB]:[CCC]"

pas le reste, et je me suis dis que si je le traitait comme un flux xml ça serais plus facile pour récupérer l'info dont j'ai besoin.

autre question si " new XMLHttpRequest(); répond true pour IE7, " je fais comment pour instancier correctement en fonction du navigateur ?
0
rhan_659 Messages postés 85 Date d'inscription lundi 1 novembre 2004 Statut Membre Dernière intervention 30 juin 2011
12 juil. 2008 à 11:36
re,

je pensais qu'en utilisant XHRequest.responseXML au lieux de XHRequest.responseTest j'obtiendrais un flux xml au lieux d'un text meme si coté format c'est pas extra-ordinaire

ce flux est bien générer par le serveur, le probleme c'est pour en extraire l'information simplement.
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
12 juil. 2008 à 11:45
Re,

Je t'aurai bien conseillé la fonction PHP : strip_tags

Dommage que tu veuille le faire en javascript !

www.php.net/strip_tags

a++

Si la réponse vous convient, pensez : Réponse acceptée !
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
12 juil. 2008 à 12:03
tu ne peux pas renvoyer que "azertyuiop:[AAA]:[BBB]:[CCC]" ?
un petit split sur la réponse et basta.

ou alors renvoi un flux xml... mais traite le comme du xml

<?xml version="1.0" encoding="ISO-8859-1"?>
    <tout>
            azertyuiop

            [AAA]

            [BBB]

            [CCC]

    </tout>

>> je fais comment pour instancier correctement en fonction du navigateur ?
comme tu as fait je pense pas regardé de près mais ça doit baigner

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
rhan_659 Messages postés 85 Date d'inscription lundi 1 novembre 2004 Statut Membre Dernière intervention 30 juin 2011
12 juil. 2008 à 12:28
Merci pour l'idée du PHP mais je suis sous Lotus Notes, j'aurais bien aimé ne renvoyer que les valeurs désirez mais mon serveur domino me les encadrent automatiquement avec les balises html.

donc j'ai fait autrement, dans mon agent qui génére mon string je les encadré de balise bidon <Data></Data>

et ensuite je ne le gere plus comme du xml mais comme du texte et j'extrait les voulue via un indexof

<html>
<head>
</head>

<Data>azertyuiop:[AAA]:[BBB]:[CCC]</Data>

</html>

et le traitement donne ça

return XHRequest.responseText.substring(XHRequest.responseText.indexOf("<Data>")+6,XHRequest.responseText.indexOf("</Data>")).split(':');

au finale c'est pas plus compliqué qu'avec le flux xml sauf si vous connaisser une meilleur méthode je vaisgarder cellelà ! et la tester madi sur ie6
0
rhan_659 Messages postés 85 Date d'inscription lundi 1 novembre 2004 Statut Membre Dernière intervention 30 juin 2011
12 juil. 2008 à 12:42
Pour Info Lotus Notes / Domino est un systeme client/server professionnelle d'IBM

il permet de faire de la messagerie, groupeware, intranet, serveur d'appli (lotus), server web. voila pourquoi je veux travailler en JS sans utiliser de PHP.

il est normale que tu ne connaisse pas Lotus Notes c'est un produit inconnus du grand public et que l'on ne trouve que dans le grosse société
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
12 juil. 2008 à 12:45
ou tu colles la réponse dans innerHTML d'un div, et tu utilises :
document.getElementById('id du div dont on cause').getElementsByTagName('Data')[0].firstChild.nodeValue
je ne dis pas que c'est une meilleure méthode   ;o)

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
12 juil. 2008 à 12:46
ok, mais j'étais pas au courant que les serveurs IBM n'acceptaient pas le php ....

a++

Si la réponse vous convient, pensez : Réponse acceptée !
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
12 juil. 2008 à 13:49
@nico : >>..serveurs IBM n'acceptaient pas le php
c'est pas tout à fait ça nico.
le serveur qu'utilise le monsieur n'autorise (peut-être)  pas, dans les "conditions" où il utilise...
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
12 juil. 2008 à 13:51
a ok,

merci bultez !

Toujours aussi savant !

a++

Si la réponse vous convient, pensez : Réponse acceptée !
0
rhan_659 Messages postés 85 Date d'inscription lundi 1 novembre 2004 Statut Membre Dernière intervention 30 juin 2011
12 juil. 2008 à 15:45
merci

mon but n'est pas d'afficher dans une div, mais de récupéré de l'information serveur que le js ne peut produire naturellement en évitant qu'il soit calculé sur le client pour des raisons de sécurité.

sinon les serveur materiel d'ibm sont comme tout les autres serveur, ici je parle de serveur logiciel. utiliser le PHP doit etre faisable dans une certaine limite, mais ça na pas tellement d'interret vu que j'ai mes propres méthode d'acces aux données

en tout cas merci pour le coup de paluche
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
12 juil. 2008 à 15:51
je parlais de mettre la réponse dans un div, pas pour l'afficher !!!
( suffit de mettre style="display:none" )
mais pour utiliser .getElementsByTagName('Data')[0].firstChild.nodeValue
tout dépend des réponses possibles, ça peut devenir très vite difficile avec substr et indexof...
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
12 juil. 2008 à 16:07
ch'tiot exemple

<script>
    var d=document.getElementById('d1');
    d.innerHTML='<html><head></head><Data>azertyuiop:[AAA]:[BBB]:[CCC]</Data></html>';
    alert(d.getElementsByTagName('Data')[0].firstChild.nodeValue);
</script>

bien sûr le rouge serait ta réponse d'ajax.

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
rhan_659 Messages postés 85 Date d'inscription lundi 1 novembre 2004 Statut Membre Dernière intervention 30 juin 2011
12 juil. 2008 à 17:28
Merci pour l'idée

mais le but étant de ne pas stocker l'information dans un élément mais juste une variable le temps d'un traitement.

je peut me permettre de faire ça car la valeur retourné sera vraimment comme ça :

azertyuiop:[AAA]:[BBB]:[CCC]

parfois

azertyuiop

mais rarement

azertyuiop:[AAA]:[BBB]:[CCC]:[DDD]:[EEE]:[FFF]

donc pour mon besoin ça convient, parceque la chaine ne sera pas tres long. j'aurai préféré pouvoir la parsé comme un flux xml (ça passe sous ff et ie6 ) mais ie7 le refuse donc je change mon fusil d'épaule

en tout cas merci pour les conseils
0
Rejoignez-nous