ajax - example - NETWORK_ERROR: XMLHttpRequest Exception 101
xmlhttprequest response (7)
Algo así me sucedió cuando devolví un XML incorrecto (puse un atributo en el nodo raíz). En caso de que esto ayude a alguien.
Estoy recibiendo este error
NETWORK_ERROR: XMLHttpRequest Exception 101
al intentar obtener contenido XML de un sitio. Aqui esta mi codigo
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);
¿Alguien tiene una solución?
Encontré un artículo muy bonito con 2 soluciones diferentes.
- El primero implementando jQuery y JSONP, explicando lo simple que es.
- El segundo enfoque, es redirigir a través de una llamada PHP. Muy sencillo y muy bonito.
La restricción de que no puede acceder a los datos de otro servidor con un XMLHttpRequest puede aplicarse incluso si la url solo implica un servidor remoto.
Entonces: url = "http://www.myserver.com/webpage.html"
Puede fallar,
pero: url = "/webpage.html"
éxito, incluso si la solicitud se realiza desde www.myserver.com
Otro método moderno para resolver este problema es el uso compartido de recursos de origen cruzado. HTML5 ofrece esta característica. Puede "ajustar" su solicitud XMLhttp en esta solicitud CORS y, si el navegador de destino admite esta función, puede usarla y no tendrá problemas.
EDITAR: Adicionalmente, debo agregar que hay muchas razones que pueden causar este problema. No solo una restricción de dominio cruzado, sino también simplemente configuraciones erróneas en su WEB.CONFIG de su servicio web.
Ejemplo IIS (.NET):
Para habilitar el acceso HTTP desde fuentes externas (en mi caso, una aplicación Phonegap compilada con solicitud CORS), debe agregar esto a su WEB.CONFIG
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
Otro escenario:
Tengo dos servicios web en ejecución ... Uno en el puerto 80 y otro en el puerto 90. Esto también me dio un error de solicitud HTTP HTTP. Incluso no sé por qué :). Sin embargo, creo que esto puede ayudar a muchos lectores poco experimentados.
Si la url
que proporciona está ubicada externamente a su servidor y el servidor no le ha permitido enviar solicitudes, tiene problemas de permisos. No puede acceder a datos de otro servidor con un XMLHttpRequest
, sin que el servidor le permita hacerlo explícitamente.
Actualización: al darme cuenta de que esto ahora es visible como una respuesta en Google, intenté encontrar algo de documentación sobre este error. Eso fue sorprendentemente difícil.
Este artículo , sin embargo, tiene información de fondo y pasos para resolver. Específicamente, menciona este error aquí:
Siempre que el servidor esté configurado para permitir solicitudes desde el origen de su aplicación web, XMLHttpRequest funcionará. De lo contrario, se lanza una excepción INVALID_ACCESS_ERR
Una interpretación de INVALID_ACCESS_ERR parece ser lo que estamos viendo aquí.
Para resolver esto, el servidor que recibe la solicitud, debe estar configurado para permitir el origen. Esto se describe con más detalle en Mozilla .
Solicitud abortada porque fue cacheada o solicitada previamente? Parece que el error de Excepción 101 de XMLHttpRequest se puede lanzar por varias razones . Descubrí que ocurre cuando envío un XMLHttpRequest con la misma URL más de una vez. (Cambiar la URL agregando una cadena sin sentido de la memoria caché al final de la URL permite que se repita la solicitud. - No tenía la intención de repetir la solicitud, pero los eventos en el programa hicieron que ocurriera y dieron como resultado esta excepción ).
No devolver el responseText o responseXML correcto en el caso de una solicitud repetida es un error (probablemente webKit).
Cuando se produjo esta excepción, obtuve un evento onload con readyState == 4 y el estado del objeto de solicitud = 0 y responseText == "" y responseXML == null. Esta fue una solicitud de dominio cruzado, que el servidor permite.
Esto fue en un sistema Android 2.3.5 que utiliza webKit / 533.1
¿Alguien tiene documentación sobre lo que se supone que significa la excepción?
xmlhttp.open("GET",url, true);
establece la parte asíncrona en verdadero