JavaScript: ActiveXObject MSXML2.XMLHTTP не возвращает XML при успешной загрузке ...? - PullRequest
1 голос
/ 10 февраля 2011

Я пытаюсь написать решение для Internet Explorer 8 для загрузки XML по «файловому» протоколу, так как сайт, который я создаю, предназначен для отправки в виде пакетов непосредственно пользователям. Все, что я испытал при попытке использовать XMLHttpRequest для обработки этого, похоже, поддерживает то, что я прочитал в Интернете: реализация XMLHttpRequest в IE8 не нравится протоколу, поэтому я должен использовать ActiveXObject для обработки загрузки.

Я экспериментировал с предложениями разных людей и, наконец, получил код, который, кажется, успешно получает файл, так как поле responseText заполнено содержимым файла. Однако поле responseXML.xml, в котором должен храниться XML (или его текстовое представление, ни одна из прочитанных мной документов не была очень ясной), всегда является пустой строкой. Как я могу настроить ActiveXObject для правильной загрузки XML?

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

Вот мой JavaScript:

function isIE() {
    return navigator.userAgent.lastIndexOf('Trident') > 0;
}

// This block ensures that the XML request occurs in the same domain.
var path = document.location.href;
path = path.substr(0, path.lastIndexOf('/') + 1);

if (isIE() && location.protocol == 'file:') {
    var xmlRequest = new ActiveXObject('MSXML2.XMLHTTP');
    xmlRequest.open('GET', path + 'xml/shared.xml', false);
    xmlRequest.onreadystatechange = useXML;
    xmlRequest.send();

    function useXML() {
        if (xmlRequest && xmlRequest.readyState && xmlRequest.readyState == 4) {
            alert(xmlRequest.responseText);    // displays the file
            alert(xmlRequest.responseXML.xml); // displays nothing
        }
    }
}

А вот мой XML-файл:

<?xml version="1.0" encoding="ISO-8859-1"?>
<shared>
    <page_title>
        Test Page Title
    </page_title>
</shared>

Я использовал валидатор XML w3schools, чтобы проверить, не поврежден ли этот файл. Это не так.

1 Ответ

2 голосов
/ 10 февраля 2011

Это связано с тем, что локальный файл не используется как text / xml (, как сервер будет делать ), и поэтому IE не будет его анализировать.

Вы можете проанализировать его вручную с помощьюMicrosoft.XMLDOM объект

function useXML() {
        if (xmlRequest && xmlRequest.readyState && xmlRequest.readyState == 4) {
            alert(xmlRequest.responseText);    // displays the file
            xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async="false";
            xmlDoc.loadXML(xmlRequest.responseText);
            title = xmlDoc.documentElement.getElementsByTagName('page_title')[0];
            alert(title.childNodes[0].nodeValue);
        }
    }
...