Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

может выйти из строя,

но:       url = "/webpage.html"

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

Ответ 3

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

Ответ 4

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

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

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

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

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

Ответ 5

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

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

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

Ответ 6

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

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

Ответ 7

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

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

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

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

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

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

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