Проблема в загрузке XML из указанного URL с использованием JavaScript в FF и Google Chrome - PullRequest
2 голосов
/ 23 сентября 2010

Мне нужно загрузить XML-файл с указанного URL-адреса с помощью JavaScript.Вот что я делаю:

function GetXMLDoc() {
    var url = 'http://www.warm.fm/exports/NowOnAir.xml';
    var httpRequest = null;
    try {
        httpRequest = new ActiveXObject('Msxml2.XMLHTTP'); 
    }
    catch (e) {
        try {
            httpRequest = new ActiveXObject('Microsoft.XMLHTTP'); 
        }
        catch (e2) {
            try {
                httpRequest = new XMLHttpRequest(); 
            }
            catch (e3) { httpRequest = false; }
        }
    }
    if (httpRequest) {
        httpRequest.open('POST', url, false);
        httpRequest.setRequestHeader("Content-Type", "text/xml");
        httpRequest.send(null);
        alert(httpRequest.responseText);
    }
    else {
        alert(httpRequest);
    }

Он отлично работает в IE, но не в FF и Google Chrome.Firebug показывает мне следующую ошибку:

исключение uncaught: [Exception ... »Компонент возвратил код ошибки: 0x80004005 (NS_ERROR_FAILURE) [nsIXMLHttpRequest.send]" nsresult: "расположение 0x80004005 (NS_ERROR_FAILURE):Данные "JS frame :: http://localhost:49697/XMLParser.js :: GetXMLDoc :: line 43": нет]

Есть ли кто-нибудь, у кого есть ответ, который поможет мне в решении проблемы?

Спасибо, Мохин

1 Ответ

2 голосов
/ 23 сентября 2010
    httpRequest.open('POST', url, false);
    httpRequest.setRequestHeader("Content-Type", "text/xml");
    httpRequest.send(null);

Это не имеет смысла.Вы делаете POST и утверждаете, что отправляете файл XML в качестве тела запроса, но затем ничего не отправляете.

Я предлагаю вам действительно сделать простой GET:

    httpRequest.open('GET', url, false);
    httpRequest.send();

Естественно, вам придется сделать это из документа на www.warm.fm, чтобы соответствовать той же политике происхождения;localhost не будет работать.

И я бы серьезно пересмотрел синхронность запроса (open...false).Это замораживает браузер, пока файл извлекается, что довольно враждебно для пользователя.Асинхронные запросы с обратным вызовом onreadystatechange почти всегда предпочтительнее.

Кроме того, кросс-браузерный материал xmlhttprequest немного старомоден и сначала пытается ActiveXObject.Родной XMLHttpRequest, как правило, является первым, чтобы пойти в первую очередь.Попробуйте использовать этот запасной код IE6:

if (!window.XMLHttpRequest && 'ActiveXObject' in window) {
    window.XMLHttpRequest= function() {
        return new ActiveXObject('MSXML2.XMLHttp');
    }
}

, тогда вы можете просто набрать new XMLHttpRequest() в любом браузере.

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