Визуализация XML-документа (полученного с помощью вызова ajax) в новом окне - PullRequest
9 голосов
/ 07 апреля 2011

Привет! Я ищу способ визуализации XML-документа, который я получаю с помощью ajax, в новом окне браузера.

Я использую функцию jjuery ajax () для отправки данных JSON на контроллер MVC. Контроллер возвращает XML в виде строки.

Я использую window.open (), чтобы создать новое окно в javascript и установить содержимое документов с помощью вызова.

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

(где jqXHR.responseText - это XML, возвращаемый из вызова ajax ().)

Новое окно открывается как положено, и если я просматриваю источник на странице, я вижу свой XML. НО (вы знали, что он придет) ничего не появляется в окне браузера. Очевидно, что если я сохраню исходный код страницы на диске и открою, вывод будет отображаться, как и ожидалось.

Может кто-нибудь предложить решение? Повторяю, моя главная цель - представить документ XML (полученный с помощью вызова ajax) в новом окне.

Я также должен добавить, что хотел бы, чтобы вывод преобразовывался с помощью XSLT. У моего XML есть эта инструкция обработки. Большое спасибо

Редактировать --------------------------- РЕШЕНИЕ, С КОТОРЫМ Я ПОШЕЛ -------- -----------------

Спасибо за все комментарии и предложения.

Решением, с которым я в итоге поехал, было создание формы с target = "_ blank". Затем я записал JSON в форму в виде скрытого поля и отправил его в мой контроллер, который возвратил XML (созданный из JSON). ). Когда XML был возвращен из ответа, браузер разметил его, как и ожидалось. Я думаю, что это не ответ на оригинальный вопрос. Но у Габби есть решение ниже.

Ответы [ 5 ]

7 голосов
/ 07 апреля 2011

Следующее будет работать только в FireFox и Opera , но я думаю, стоит упомянуть ..

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

должен работать и с Chrome, но, похоже, он обрабатывает window.open иначе, чем обычный URL-адрес ... если вы просто наберете полученный URL-адрес в Chrome, он тоже будет работать ..


Обновление Это работает со всеми браузерами!

Дело в том, что в javascript есть возможность трансформировать xml с помощью xslt.
Но не автоматически, поэтому нам нужно найти файл XML для ссылки на файл XSLT и загрузить его. Затем мы можем выполнить преобразование в javascript и передать полученный html в новое окно.

Естественно, IE обрабатывает вещи не так, как остальные.

$.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();
                  });
   });
0 голосов
/ 07 апреля 2011

Браузер отображает HTML.IE и некоторые другие открывают XML-файл с форматированием, но это не стандартное поведение браузеров - поэтому вам не следует полагаться на него.Лучшее решение для меня - предложить загрузить файл, и пользователь сам решит, когда захочет сохранить файл или открыть его.Но если вы не хотите загружать файл, вам нужно сгенерировать html из вашего xml.Это тот случай, когда вам нужно сделать некоторое форматирование, добавить стили CSS, чтобы он был более удобным и читаемым.И для этого лучше всего использовать Xsl Transformation для генерации выходного html из xml.Это был бы самый элегантный способ генерировать HTML прямо из XML.Но в случае, если вам это тоже не нужно, и вы действительно не заботитесь о пользовательском опыте, вы можете использовать некоторый текстовый элемент (p, span и т. Д.) И писать xml не непосредственно в новом окне, а в тексте этого элемента.Таким образом, ваш XML будет отображаться как

0 голосов
/ 07 апреля 2011

Запишите XML в текстовое поле. Стилизуйте текстовую область с помощью CSS.

0 голосов
/ 07 апреля 2011

Вы должны установить всплывающее окно равным Content-type: text/xml, и ofc начать всплывающее окно с <?xml version="1.0" encoding="UTF-8"?>

0 голосов
/ 07 апреля 2011

Вы можете потерять модное слово, но почему бы вам просто не открыть окно, которое указывает на URL контроллера?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...