Rendre le document XML (obtenu via un appel ajax) vers une nouvelle fenêtre

Bonjour, je cherche un moyen de rendre un document XML, que je récupère à l'aide d'ajax, dans une nouvelle fenêtre de navigateur.

J'utilise la fonction ajax () de JQuery pour afficher les données JSON dans un contrôleur MVC. Le contrôleur renvoie XML en tant que chaîne.

J'utilise window.open () pour créer une nouvelle fenêtre dans javascript et définir le contenu des documents en appelant.

newwindow.document.clear(); newwindow.document. newwindow.document.write(jqXHR.responseText); newwindow.document.close(); 

(Où jqXHR.responseText est le XML renvoyé de l'appel ajax ().)

La nouvelle fenêtre s'ouvre comme prévu et si je visualise la source sur la page, je vois mon XML. MAIS (vous saviez que quelqu'un venait), rien ne s'affiche dans la fenêtre du navigateur. Évidemment, si je sauvegarde la source de la page sur le disque et que l'ouverture, la sortie est rendue comme prévu.

Quelqu'un peut-il proposer une solution? Juste pour ré-itérer mon objectif principal, c'est de rendre un document XML (obtenu via un appel ajax) dans une nouvelle fenêtre.

Je devrais également ajouter que j'aimerais voir la sortie transformée par un XSLT. Mon XML possède cette instruction de traitement. Merci beaucoup

Modifier ————————— LA SOLUTION QUE J'AI FAIT AVEC —————– ——–

Merci pour tous les commentaires et suggestions.

La solution que j'ai fini par être d'avoir une forme avec target = "_ blank" J'ai ensuite écrit le JSON sur le formulaire comme un champ caché, et l'ai posté sur mon contrôleur qui a renvoyé le XML (construit à partir du JSON). Lorsque le XML a été retourné à partir de la réponse, le navigateur l'a marqué comme prévu. Je suppose que ce n'est pas une réponse à la question initiale. Mais Gabby a une solution ci-dessous.

Ce qui suit ne fonctionnera que dans FireFox et Opera , mais je pense qu'il convient de mentionner …

 window.open('data:text/xml,' + encodeURIComponent( jqXHR.responseText ) ); 

window.open fonctionner avec Chrome, mais il semble traiter window.open différemment que l'URL habituelle. Si vous tapez simplement l'url qui en résulte, il fonctionne également.


Mise à jour Cela fonctionne avec tous les navigateurs!

La chose est que javascript a la possibilité de transformer xml en utilisant xslt.
Mais pas automatiquement, nous devons donc trouver le fichier XML pour la référence au fichier XSLT et le charger également. Ensuite, nous pouvons effectuer la transformation en javascript et passer le résultat html résultant à la nouvelle fenêtre.

Naturellement IE gère la chose différemment du reste.

 $.get('xml-file-here.xml', function(xmlData){ var xml = xmlData; //extract the stylesheet so we can load it manually var stylesheet; for (var i=0;i<xml.childNodes.length;i++){ if ( xml.childNodes[i].nodeName =='xml-stylesheet' ) { stylesheet = xml.childNodes[i].data; } } var items = stylesheet.split('='); var xsltFile = items[items.length-1].replace(/"/g,''); //fetch xslt manually $.get( xsltFile, function(xsltData){ var xslt = xsltData; var transformed; if (! window['XSLTProcessor']) { // Trasformation for IE transformed = xml.transformNode(xslt); } else { // Transformation for non-IE var processor = new XSLTProcessor(); processor.importStylesheet(xslt); var xmldom = processor.transformToDocument(xml); var serializer = new XMLSerializer(); var transformed = serializer.serializeToString(xmldom.documentElement); } var newwindow = window.open(); newwindow.document.open(); newwindow.document.write(transformed); newwindow.document.close(); }); }); 

Vous devez configurer le popup pour être Content-type: text/xml et ofc start popup avec <?xml version="1.0" encoding="UTF-8"?>

Vous pourriez perdre un mot à la mode, mais pourquoi ne pas ouvrir une fenêtre qui pointe vers l'URL du contrôleur?

Écrivez le XML dans une zone de texte. Style la zone de texte en utilisant CSS.

Le navigateur rend html. IE et d'autres ouvrent le fichier xml avec le formatage, mais ce n'est pas le comportement par défaut des navigateurs – donc vous ne devez pas compter sur le fichier. Une meilleure solution pour moi est de suggérer de télécharger un fichier, et l'utilisateur décidera chaque fois qu'il veut enregistrer le fichier ou l'ouvrir. Mais dans le cas où vous ne voulez pas télécharger le fichier, vous devez générer html à partir de votre xml. C'est le cas lorsque vous devriez faire du formatage, ajouter des styles css pour qu'il soit plus convivial et lisible. Et pour ce faire, le meilleur est d'utiliser Xsl Transformation pour générer votre sortie html à partir de xml. Ce serait la manière la plus élégante de générer html directement à partir de xml. Mais au cas où vous ne le souhaitez pas, et vous ne vous souciez vraiment pas de l'expérience de l'utilisateur, vous pouvez utiliser un élément de texte (p, span, etc.) et écrire xml pas directement dans une nouvelle fenêtre, mais dans le texte de cet élément. De cette façon, votre xml sera affiché tel quel