NETWORK_ERROR: XMLHttpRequest Exception 101

Estoy recibiendo este error

NETWORK_ERROR: XMLHttpRequest Exception 101

cuando intenta obtener contenido XML de un sitio. Aquí está mi código

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?

Si la url que proporciona se encuentra externamente a su servidor y el servidor no le ha permitido enviar solicitudes, tiene problemas de permisos. No puede acceder a los datos de otro servidor con XMLHttpRequest , sin que el servidor lo permita explícitamente.

Actualización: Al darme cuenta de esto ahora es visible como una respuesta en Google, intenté encontrar documentación sobre este error. Eso fue sorprendentemente difícil.

Sin embargo, este artículo contiene información básica 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 configurarse para permitir el origen. Esto se describe con más detalles en Mozilla .

La restricción de que no se puede acceder a los datos de otro servidor con 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”

tener éxito, incluso si la solicitud se realiza desde http://www.myserver.com

Algo así sucedió conmigo cuando devolví XML incorrecto (puse un atributo en el nodo raíz). En caso de que esto ayude a alguien.

¿Solicitud abortada porque fue almacenada en caché o solicitada previamente? Parece que el error XMLHttpRequest Exception 101 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 al agregar una caché que derrota una cadena sin sentido 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 progtwig provocaron que ocurriera y resultó en esta excepción )

No devolver la respuesta correctaTexto o responseXML en el caso de una solicitud repetida es un error (probablemente webKit).

Cuando se produjo esta excepción, obtuve un evento de carga 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 usa webKit / 533.1

¿Alguien tiene documentación sobre lo que se supone que significa la excepción?

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

establecer la parte async como verdadera

Encontré un artículo muy bueno con 2 soluciones diferentes.

  1. El primero implementando jQuery y JSONP, explicando lo simple que es.
  2. El segundo enfoque, se está redirigiendo a través de una llamada PHP. Muy simple y muy agradable.

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

Otro método moderno para resolver este problema es Cross Origin Ressource Sharing. HTML5 ofrece esta característica. Puede “ajustar” su solicitud XMLhttp en esta CORS_request y si el navegador objective admite esta característica, puede usarla y no tendrá problemas.

EDITAR: Additionaly tengo que agregar que hay muchas razones que pueden causar este problema. No solo una restricción de dominios cruzados sino también configuraciones incorrectas en su WEB.CONFIG de su servicio web.

Ejemplo IIS (.NET):

Para habilitar el acceso HTTP desde fonts externas (en mi caso, una aplicación Phonegap comstackda con solicitud CORS) debe agregar esto a su WEB.CONFIG

        

Otro escenario:

Tengo dos webservices 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. Ni siquiera sé por qué 🙂 Sin embargo, creo que esto puede ayudar a muchos lectores no muy experimentados.