NETWORK_ERROR: исключение XMLHttpRequest 101 - PullRequest
29 голосов
/ 10 февраля 2010

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

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);

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

Ответы [ 7 ]

24 голосов
/ 07 апреля 2010

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

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

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

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

Интерпретация INVALID_ACCESS_ERR , кажется, то, что мы смотрим здесь.

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

4 голосов
/ 24 июля 2012

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

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

может дать сбой,

но: url = "/webpage.html"

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

2 голосов
/ 08 июня 2013

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

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

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

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

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

2 голосов
/ 07 апреля 2010

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

1 голос
/ 02 июля 2013
xmlhttp.open("GET",url, true);

установить асинхронную часть на true

1 голос
/ 24 сентября 2012

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

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

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

0 голосов
/ 26 мая 2013

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

EDIT: Кроме того, я должен добавить, что есть много причин, которые могут вызвать эту проблему. Не только междоменное ограничение, но и просто неправильные настройки в вашем WEB.CONFIG вашего веб-сервиса.

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

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

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

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

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

...