Ajax JQuery pour charger XML, ne fonctionne pas dans IE ou Edge

C’est le XML que j’ai actuellement:

  ICN
HKG

Ensuite, j’utilise le code suivant pour extraire le contenu XML:

 $.get("file.xml",function(d){ $("div").html($(d).find("item:first").html()); }); 

Ce code fonctionne dans Chrome, mais pas dans IE. Je me demande pourquoi c’est le cas. Bien sûr, je pourrais changer html() en text() , ce qui fonctionnerait dans tous les navigateurs, mais cela reviendrait à ICNHKG , ce qui n’est pas ce que je veux.

Une idée sur ce qu’il se passe? Beaucoup d’aide est appréciée.

À propos de $.get()

Selon la documentation de Jquery, $.get() devine automatiquement le type de contenu et, conformément au type de données, effectue une forme d’parsing. Dans le code source, on peut trouver ceci comme:

 // Data converters // Keys separate source (or catchall "*") and destination types with a single space converters: { // Convert anything to text "* text": Ssortingng, // Text to html (true = no transformation) "text html": true, // Evaluate text as a json expression "text json": jQuery.parseJSON, // Parse text as xml "text xml": jQuery.parseXML }, 

À propos de $.parseXML()

Selon la documentation de Jquery, cette fonction utilise l’parsingur XML natif des navigateurs. Pour IE, cette méthode est appelée d’une autre manière que pour les autres navigateurs, comme indiqué ici dans le code source de Jquery. que tous les autres navigateurs, mais aussi qu’il s’agit d’un de ceux- ci c’est pourquoi nous aimons les moments IE :

 if ( window.DOMParser ) { // Standard tmp = new window.DOMParser(); xml = tmp.parseFromSsortingng( data, "text/xml" ); } else { // IE xml = new window.ActiveXObject( "Microsoft.XMLDOM" ); xml.async = "false"; xml.loadXML( data ); } 

À propos de [object XMLDocument] et de innerHTML

Si vous essayez d’ alert() un document analysé XML, vous obtiendrez [object XMLDocument] comme retour. Qu’est-ce qu’un object XMLDocument? Cela signifie qu’il s’agit d’un type d’object différent d’un object régulier (wow, je ne l’ai pas vu venir).

Dans les navigateurs modernes, cette différence est en réalité (presque) absente. Cependant, dans IE, cela signifie qu’il n’existe pas de propriété telle que innerHTML. La seule chose qui existe est une forme de nodeValue et le .textContent régulier, qui détruisent tous les deux le contenu HTML. Cela ne signifie cependant pas que votre balise br est totalement impossible à récupérer à partir du XML, ce n’est pas si simple, car elle est interprétée comme une nouvelle balise XML, comme vous pouvez le voir avec le code ci-dessous:

 $.get("/file.xml", function(d) { console.log(d.getElementsByTagName("item")[0].childNodes); }); 

Renvoie ceci dans IE:

Nodelist

Cependant, y accéder n’est pas vraiment facile.

 $.get("file.xml", function(d) { console.log(d.getElementsByTagName("item")[0].childNodes[1].nodeValue); //returns null console.log(d.getElementsByTagName("item")[0].childNodes[1].nodeName); //returns br }); 

En bref, l’parsingur XML IE n’est pas vraiment adapté au contenu HTML. De très nombreuses méthodes n’existent pas, ce qui entraînera des problèmes majeurs.

Alors que dois-je faire?

Il y a différentes approches possibles. La première consiste simplement à spécifier un autre type de données et à le gérer comme tel:

 $.get("file.xml", function(d) { $("div").html($(d).find("item:first").html()); },"text"); //Datatype: text 

Une autre possibilité serait d’utiliser CDATA :

XML

   ICN]]>  

Javascript (jquery)

 $.get("file.xml", function(d) { $("div").html($(d).find("item:first").text()); });