1 votes

Problèmes d'analyse XML avec jQuery dans IE6

Je cherche à extraire des valeurs à partir d'un fichier xml en utilisant jQuery de manière compatible avec tous les navigateurs. Je n'ai aucun problème pour le faire dans Firefox, mais malheureusement cela doit aussi être compatible avec IE.

Mon code jQuery ressemble à ceci:

$(document).ready(function()) {
  $.get("file.xml", {}, function(parseRefreshTime){
    alert("Cette ligne est exécutée dans IE.");  
    $("created", parseRefreshTime).each(function() {
      alert("Cette ligne n'est pas exécutée dans IE.");  
      refreshTime = $(this).text();
      //faire quelque chose avec refreshtime
    });
  });
});

Cela extrait la valeur du nœud pour un nœud dans mon fichier xml.

Je fais référence à la bibliothèque jQuery dans ma page, et elle est analysée correctement dans Firefox, donc je suppose que mon code d'analyse est approprié. J'obtiens les deux alertes dans Firefox, mais seulement la première dans IE.

Je pourrais jurer avoir eu un code très similaire qui fonctionnait hier, mais j'ai dû modifier quelque chose et l'avoir ensuite cassé. Après avoir lutté avec cela pendant presque une heure maintenant, je cherche un autre regard.

Est-ce que quelqu'un peut repérer ce que je fais de mal ici?

4voto

Charles Hoffman Points 1

Quelques choses:

  • Spécifiez le type de réponse comme xml pour votre requête AJAX
  • Enveloppez l'objet XML retourné dans $(doc) et utilisez find pour interroger l'XML
  • Je pense que vous avez quelques fautes de frappe dans votre première ligne: reader devrait être ready et vous avez une parenthèse fermante supplémentaire

Cela fonctionne pour moi sur IE6. Si cela ne fonctionne pas pour vous, vous voudrez peut-être vérifier si vous servez correctement votre XML.

index.html:

  Test

    $(document).ready(function() {
      $.get("test.xml", null, function(doc) {
        $(doc).find('created').each(function() {
          alert($(this).text());
        })
      }, 'xml');
    });

test.xml:

2010-01-07 00:00:00

2voto

Anwar Chandra Points 4341

Essayez d'envelopper parseRefreshTime avec $()

    $("created", $(parseRefreshTime)).each(function() {
      alert('Cette ligne n'est *pas* exécutée dans IE.');  
      refreshTime = $(this).text();
      //faire des choses avec refreshTime
    });

ou essayez d'utiliser $(parseRefreshTime).find('created')

    $(parseRefreshTime).find("created").each(function() {
      alert('Cette ligne n'est *pas* exécutée dans IE.');  
      refreshTime = $(this).text();
      //faire des choses avec refreshTime
    });

mis à jour: aussi, essayez de spécifier le type à xml.

$.get("file.xml", {}, , "xml")

1voto

kgiannakakis Points 62727

Assurez-vous que 'text/xml' est utilisé comme type de contenu pour le fichier xml.

0voto

Nakul Points 1232

Je suis en train d'utiliser quelque chose comme ceci:

    if ($.browser.msie){
        var tempXML = new ActiveXObject("Microsoft.XMLDOM");
        tempXML.async = false;
        tempXML.loadXML(data);
        xmlc = tempXML;
        items = $($(xmlc)[0]);
    } else if(window.DOMParser){
        items = $(new DOMParser().parseFromString(data, "text/xml").childNodes[0]);
    } else {
        xmlc = data;
        items = $($(xmlc)[1]);
    }

Essentiellement, essayez la méthode Microsoft.XMLDOM pour IE. Pouvez-vous fournir un exemple de xml?

0voto

Bor Points 1303

Un des plus gros ennuis avec XML et IE6 est l'encodage des caractères. Assurez-vous que votre navigateur peut interpréter correctement le fichier. Il se peut très bien que votre serveur web serve la page avec un en-tête d'encodage différent par rapport au document lui-même.

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