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

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

7 ответов

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

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

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

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

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

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

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

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

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

но: url = "/webpage.html"

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

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

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

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

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

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

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

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

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

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

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

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

Другим современным методом решения этой проблемы является обмен исходным кодом перекрестного происхождения. 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. Я даже не знаю почему:). Тем не менее, я думаю, что это может помочь многим неопытным читателям.

Другие вопросы по тегам