NETWORK_ERROR: исключение XMLHttpRequest 101

Я получаю эту ошибку

NETWORK_ERROR: исключение XMLHttpRequest 101

при попытке получить XML-контент с одного сайта.

Вот мой код:

    var xmlhttp; 
    if(window.XMLHttpRequest) { 
        xmlhttp = new XMLHttpRequest();
    }

    if (xmlhttp==null) {
        alert ("Your browser does not support XMLHTTP!");
        return;
    }

    xmlhttp.onReadyStateChange=function() {
        if(xmlhttp.readyState==4) {
            var value =xmlhttp.responseXML;
            alert(value);
        }
    }
    xmlhttp.open("GET",url,false);
    xmlhttp.send();
    //alert(xmlhttp.responseXML);
}

xmlhttp.open("GET",url,false);
xmlhttp.send(null);

У кого-нибудь есть решение?


person pawan Mangal    schedule 10.02.2010    source источник
comment
это похоже на междоменную проблему   -  person Moataz Elmasry    schedule 24.07.2012
comment
Пожалуйста, укажите, в каком браузере и/или на какой платформе вы видите проблему (я получил исключение на Android 2.3.7 с WebKit 533.1).   -  person Ribo    schedule 08.06.2013


Ответы (7)


Если url, который вы предоставляете, находится за пределами вашего сервера, и сервер не разрешает вам отправлять запросы, у вас проблемы с разрешениями. Вы не можете получить доступ к данным с другого сервера с помощью XMLHttpRequest, если сервер явно не разрешит вам это сделать.

Обновление. Понимая, что теперь это отображается как ответ в Google, я попытался найти документацию по этой ошибке. Это было на удивление тяжело.

В этой статье есть некоторые справочная информация и шаги для решения. В частности, здесь упоминается эта ошибка:

Пока сервер настроен на разрешение запросов от источника вашего веб-приложения, XMLHttpRequest будет работать. В противном случае выдается исключение INVALID_ACCESS_ERR.

Похоже, что здесь мы рассматриваем интерпретацию INVALID_ACCESS_ERR.

Чтобы решить эту проблему, сервер, который получает запрос, должен быть настроен на разрешение происхождения. Это описано в подробнее в Mozilla.

person Frederik Wordenskjold    schedule 07.04.2010
comment
[Этот пост] является мертвой ссылкой. - person Léon Pelletier; 25.01.2013
comment
Спасибо! Мертвая ссылка удалена. - person Frederik Wordenskjold; 26.01.2013
comment
URL-адреса, расположенные в другом домене/сайте, не обязательно являются проблемой разрешения. Межсайтовые запросы можно выполнять с помощью XMLHttpRequest, если это разрешено целевым сервером. - person Ribo; 08.06.2013
comment
Я нахожу умеренно забавным, что 5 лет спустя (по состоянию на 2015 год) это первое попадание на эту тему в Google, и этот ответ говорит, что у Google есть много информации об этом;). - person j03m; 07.04.2015
comment
Какие у нас есть варианты, если мы находимся на общем сервере и не можем запросить изменение разрешений? - person Zibbobz; 31.07.2020
comment
Или, что более важно, если этот запрос исходит от сервера, на котором находится приложение, и я все еще получаю эту ошибку, возможно ли, что сервер не принимает запросы от моего приложения, даже если приложение находится там. проживает? - person Zibbobz; 03.08.2020

Ограничение, заключающееся в том, что вы не можете получить доступ к данным с другого сервера с помощью XMLHttpRequest, может применяться, даже если URL-адрес просто подразумевает удаленный сервер.

Итак: url = "http://www.myserver.com/webpage.html"

может потерпеть неудачу,

но: url = "/webpage.html"

успешно - даже если запрос делается с www.myserver.com

person Ian    schedule 24.07.2012
comment
XMLHttpRequest можно использовать для доступа к данным с других серверов, если целевой сервер разрешает это (несколько лет назад это было невозможно). - person Ribo; 08.06.2013

Что-то подобное произошло со мной, когда я вернул неправильный XML (я поставил атрибут в корневом узле). На случай, если это кому-нибудь поможет.

person Mart van de Sanden    schedule 07.04.2010

Запрос прерван, потому что он был закэширован или запрошен ранее? Кажется, ошибка XMLHttpRequest Exception 101 может быть вызвана несколькими причинами. Я обнаружил, что это происходит, когда я отправляю XMLHttpRequest с одним и тем же URL-адресом более одного раза. (Изменение URL-адреса путем добавления бессмысленной строки кэширования в конец URL-адреса позволяет повторить запрос. -- Я не собирался повторять запрос, но события в программе вызвали это и привели к этому исключению. ).

Отсутствие возврата правильного responseText или responseXML в случае повторного запроса является ошибкой (вероятно, webKit).

Когда произошло это исключение, я получил событие загрузки с readyState==4 и состоянием объекта запроса=0 и responseText=="" и responseXML==null. Это был междоменный запрос, который сервер разрешает.

Это было в системе Android 2.3.5, которая использует webKit/533.1.

У кого-нибудь есть документация о том, что должно означать исключение?

person Ribo    schedule 07.06.2013

xmlhttp.open("GET",url, true);

установите для асинхронной части значение true

person Lian    schedule 02.07.2013

Я нашел очень хорошую статью с двумя разными решениями.

  1. Первый реализует jQuery и JSONP, объясняя, насколько это просто.
  2. Второй подход, это перенаправление через вызов PHP. Очень просто и очень красиво.

http://mayten.com.ar/blog/42-ajax-cross-domain

person Martin    schedule 24.09.2012

Еще один современный метод решения этой проблемы — Cross Origin Ressource Sharing. HTML5 предлагает эту функцию. Вы можете «обернуть» свой запрос XMLhttp в этот CORS_request, и если целевой браузер поддерживает эту функцию, вы можете использовать ее и не возникнет проблем.

РЕДАКТИРОВАТЬ: Дополнительно я должен добавить, что есть много причин, которые могут вызвать эту проблему. Не только междоменное ограничение, но и просто неправильные настройки в вашем WEB.CONFIG вашего веб-сервиса.

Пример IIS(.NET):

Чтобы включить HTTP-доступ из внешних источников (в моем случае скомпилированное приложение Phonegap с запросом CORS), вы должны добавить это в свой WEB.CONFIG.

    <webServices>
        <protocols>
            <add name="HttpGet"/>
            <add name="HttpPost"/>
        </protocols>
    </webServices>

Другой сценарий:

У меня запущены две веб-службы... Одна на порту 80, а другая на порту 90. Это также дало мне ошибку HTTP-запроса XML. Я даже не знаю, почему :). Тем не менее, я думаю, что это может помочь многим не очень опытным читателям.

person chriz    schedule 26.05.2013