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