2010-02-10 11 views
29

Estoy consiguiendo este errorNETWORK_ERROR: XMLHttpRequest Excepción 101

NETWORK_ERROR: XMLHttpRequest Exception 101

cuando se trata de obtener el contenido de un sitio XML. 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?

+0

esto se ve como un problema dominios –

+0

¡Por favor, qué navegador y/o la plataforma que se ve el problema en (Tengo la excepción en Android 2.3.7 con WebKit 533,1 – Ribo

Respuesta

2

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

+3

¿Cómo es incorrecto un atributo en el nodo raíz? Xml? – devios1

23

Si el 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 desde otro servidor con un XMLHttpRequest, sin que el servidor lo permita explícitamente.

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

This article embargo, tiene algunos antecedentes y pasos para resolver. En concreto, se menciona este error aquí:

As long as the server is configured to allow requests from your web application's origin, XMLHttpRequest will work. Otherwise, an INVALID_ACCESS_ERR exception is thrown

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 en more details at Mozilla.

+0

[Esta publicación] es un vínculo inactivo. –

+1

Gracias. Se eliminó el enlace inactivo. –

+0

Las URL ubicadas en otro dominio/sitio no son necesariamente un problema de permisos. hecho utilizando XMLHttpRequest si el servidor de destino lo permite. – Ribo

4

La restricción de que no se puede acceder a los datos de otro servidor con XMLHttpRequest se puede aplicar incluso si la url solo implica un servidor remoto.

Así: url = "http://www.myserver.com/webpage.html"

puede fallar,

pero: url = "/webpage.html"

éxito - incluso si la solicitud se formula a partir www.myserver.com

+0

XMLHttpRequest se puede usar para acceder a los datos de otros servidores si el servidor de destino lo permite (hace años no podría). – Ribo

1

me encontré con un artículo muy agradable con 2 diferentes soluti ons.

  1. El primero que implementa 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

0

Otro método moderno de resolver este problema es Cruz Origen Ressource Compartir. HTML5 ofrece esta característica. Puede "ajustar" su solicitud de XMLhttp en esta CORS_request y si el navegador de destino admite esta característica, puede usarla y no tendrá problemas.

EDIT: Además, 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 fuentes externas (en mi caso una aplicación Phonegap compilado con la petición CORS) hay que añadir 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 HTTP HTTP Request. Ni siquiera sé por qué :) Sin embargo, creo que esto puede ayudar a muchos lectores no muy experimentados.

2

¿Solicitud cancelada 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 programa provocaron que ocurriera y dio como resultado esta excepción)

No devuelve 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 utiliza WebKit/533,1

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

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

establecer la parte asíncrona a la verdadera