Преобразование из объекта XML jQuery в строку приводит к ошибке безопасности - PullRequest
3 голосов
/ 27 февраля 2012

У меня есть объект XML, сгенерированный jQuery из ответа веб-службы REST:

$.ajax({
    type: "GET",
    url: "http://localhost:9299/foo",
    success:function(xml) {
        xmlDoc = $.parseXML(xml);
        $xml = $(xmlDoc);
        // The rest of the code manipulates the structure of the XML
    }
});

Теперь мне нужно вывести измененный объект XML в виде строки. Я уже нашел это решение для Firefox и других браузеров:

out = new XMLSerializer().serializeToString($xml);

Но я получаю только следующее сообщение об ошибке:

[Exception... "Security error"  code: "1000" nsresult: "0x805303e8 (NS_ERROR_DOM_SECURITY_ERR)"  location: "http://localhost/bar"]

Все нужные мне файлы находятся на локальном хосте (включая веб-сервис, предоставляющий мне XML и библиотеку jQuery)

Любые идеи будут высоко оценены

Редактировать:

Я упростил проблему и попробовал следующий код:

$xml = $('<?xml version="1.0"?><root><element>bla</element><element>blubb</element></root>');
$xml.find("element").each(function() {
    alert($(this).text());
});
out = new XMLSerializer().serializeToString($xml);

Даже без какого-либо вызова веб-службы проблема остается той же. (Предупреждение выводит содержимое правильно)

Редактировать 2:

Благодаря комментарию Кевина Б. у меня есть рабочее решение:

$.ajax({
    type: "GET",
    url: "http://localhost:9299/foo",
    dataType: 'xml',
    success:function(xml) {
        var $xml = $(xml);
        // The rest of the code manipulates the structure of the XML
    }
});

Последняя строка не меняется:

out = new XMLSerializer().serializeToString($xml);

Ответы [ 3 ]

1 голос
/ 27 февраля 2012

Во-первых, я не могу подтвердить / отклонить на основе вашего кода, является ли это междоменным запросом.Кросс-домен - это когда номер порта, домен или протокол внешнего файла отличается от того, который запрашивает внешний файл.

Если это действительно междоменный запрос, вам нужно реализовать CORS или прокси на стороне сервера, чтобы запросить его у вас.

Во-вторых, вам не нужно использовать $.parseXML().Попробуйте это:

$.ajax({
    type: "GET",
    url: "/foo",
    dataType: "xml",
    success:function(xml) {
        var $xml = $(xml);
        // The rest of the code manipulates the structure of the XML
    }
});

XML также должен быть действительным, чтобы он работал во всех браузерах.

Редактировать: Таким образом, это не междоменная проблема, и это не jqueryвопрос.Вот еще несколько отладок: http://jsfiddle.net/RKpua/ Я использовал очень простой XML-документ, можете ли вы заменить простой XML-документ на ваш XML?

0 голосов
/ 27 апреля 2013

Вам необходимо получить доступ к свойству xml dom объекта jQuery, указав первый элемент в объекте jquery.

out = new XMLSerializer().serializeToString($xml[0]);

Кроме того, XMLSerializer недоступен в IE <9. Для IE8 используйте следующее </p>

out = $xml[0].xml;

Или как расширение jquery

$.fn.xml2string = function(){
if (window.XMLSerializer) {
    return (new XMLSerializer()).serializeToString(this[0]);
} else if (typeof this[0].xml != "undefined") {
    return this[0].xml;
}
return "";
};
0 голосов
/ 27 февраля 2012

Вам не нужно анализировать вывод, потому что jQuery выводит его. в любом случае вы можете указать dataType.

$.ajax({
    type: "GET",
    url: "http://localhost:9299/foo",
    dataType: "xml",
    success:function(xml) {
        $xml = $(xmlDoc);
        // The rest of the code manipulates the structure of the XML
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...