1 votes

comment recevoir du XML dans IE8 avec mootools

Je suis en train de faire un site web où j'utilise beaucoup les requêtes AJAX pour un service XML. En fait, mon web est un front-end avec presque serveur et utilise AJAX pour communiquer avec le back-end. le back-end.

Tout se passait bien (j'ai développé et testé dans Ubuntu 9.04 et Firefox 3.0 comme navigateur). Un jour, j'ai décidé de voir comment mon web se comportait dans IE8... l'horreur !

Rien ne fonctionnait comme c'était merveilleusement le cas dans Firefox. Pour être plus précis, les Request.HTML ne fonctionnaient pas. Comme je l'ai dit, mon site web dépendait fortement de cela, donc rien ne fonctionnait.

J'ai passé une journée à essayer de faire fonctionner quelque chose, mais je n'ai pas eu de chance La seule conclusion à laquelle je suis arrivé est que le XML était incorrectement analysé (j'espère que je suis dans l'erreur). Passons au code :

var req = new Request.HTML({
        url: 'service/Catalog.groovy',

        onSuccess: function(responseTree, responseElements) {

            var catz = responseElements.filter('category');
            catz.each(function(cat){
                // cat = $(cat);
                var cat_id = cat.get('id');
                var subcategory = cat.getElement('subcategory');
                alert(cat_id);
                alert(cat.get('html'));
                alert(subcategory.get('html'));
           }
       },
       onFailure: function(){...}

});

par exemple, ce morceau de code. Dans firefox, il fonctionne parfaitement. Il a alerté un ID (par exemple, 7), puis il montre le contenu de l'élément catégorie, par exemple :

<subcategory id='1'>
      <category_id>7</category_id>
      <code>ACTIO</code>
      <name>Action</name>
</subcategory>

et ensuite il a montré le contenu d'un élément intérieur, dans ce cas :

<category_id>7</category_id>
<code>ACTIO</code>
<name>Action</name>

Dans IE8, la première alerte fonctionne correctement (7 alertes). mais l'alerte suivante (alert(cat.get('html')) ;) a donné une chaîne vide et la dernière a déclenché une exception... elle a dit quelque chose à propos de la sous-catégorie étant nulle.

Ce que j'ai conclu avec tout ça, c'est que les éléments étaient analysés correctement dans Firefox, mais dans IE8 je n'ai eu que les balises et les attributs OK, tout le reste était complètement faux (en fait, absent). Je veux dire, le contenu interne de tous les de la réponse avait disparu !

Autre fait que vous pourriez utiliser : ce code : alert(cat.get('tag')) ; résultat dans Firefox : catégorie IE8 : /category <-----------( ?)

hmm quoi d'autre... oh oui... la ligne que vous voyez commentée ci-dessus (cat = $(cat) ;) était quelque chose que j'ai essayé de faire pour résoudre ce problème. J'ai lu dans les Docs de mootools que IE avait besoin de d'appeler explicitement la fonction $ sur les éléments pour obtenir toute la magie de l'élément ... mais ceci mais cela n'a rien résolu.

J'étais tellement désespéré... J'ai même bidouillé le code de mootools.js.

OK, donc... Ce que je veux, chers mootool-pro's, c'est que vous m'aidiez à résoudre ce problème, car j'ai VRAIMENT besoin que le web fonctionne dans IE8, et en fait j'ai choisi mootools pour oublier les problèmes de compatibilité...

Eh bien ... désolé pour mon anglais chancelant et la longueur du post ! Merci beaucoup d'avance !

Manuel

ps : si quelque chose n'est pas clair, n'hésitez pas à DEMANDER ! J'apprécie toute aide :D

1voto

Tom Points 5872

J'ai eu un problème similaire il y a quelques temps en utilisant jQuery. Le problème était que, dans IE, les données de réponse entrantes devaient être gérées par la balise Microsoft.XMLDOM Objet ActiveX.

Les étapes générales sont les suivantes :

  1. Instancie l'objet ActiveX.

    var oXmlDoc = new ActiveXObject("Microsoft.XMLDOM");

  2. Passez-lui les données de réponse entrantes et chargez-les.

    oXmlDoc.loadXML(sXmlResponseData);

  3. Analysez-le si nécessaire.

Vous pouvez consulter la résolution complète ici .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X