XMLHttpRequest estado 0 (responseText está vacío)

6 minutos de lectura

XMLHttpRequest estado 0 (responseText está vacío)
arigasa

No se pueden obtener datos con XMLHttpRequest (estado 0 y texto de respuesta está vacío):

xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET","http://www.w3schools.com/XML/cd_catalog.xml", true);
xmlhttp.onreadystatechange=function() 
{
  if(xmlhttp.readyState==4)
    alert("status " + xmlhttp.status);
}
xmlhttp.send();

Alerta “estado 0”.

La misma situación con la solicitud localhost (cd_catalog.xml se guarda como un archivo local)

xmlhttp.open("GET","http://localhost/cd_catalog.xml", true);

Pero con la solicitud de IP localhost

xmlhttp.open("GET","http://127.0.0.1/cd_catalog.xml", true);

y con la solicitud de archivo local

xmlhttp.open("GET","cd_catalog.xml", true);

todo está bien (estado 200)

¿Qué puede causar el problema (estado = 0) con la solicitud en línea?

PD: Live HTTP Headers muestra que todo está bien en los 4 casos:

  HTTP/1.1 200 OK
  Content-Length: 4742

PS2: servidor web local Apache en VMWare (host OS Win7, Guest OS Ubuntu, adaptador de red – NAT). Navegador – Firefox.

  • ¿Está tu página de prueba en http://127.0.0.1 ¿por casualidad? 😉

    – Roatin Marth

    15 feb. 2011 a las 16:00


  • Si. 127.0.0.1/CDCatalogTest.html ódigo>

    – arigasa

    15 feb.


  • Respondiste tu pregunta. XMLHttpRequest no se pueden hacer solicitudes entre dominios. Sin embargo, hay algunas soluciones. Mira jquery, por ejemplo.

    – meze

    15 feb.

  • Usa php para obtener el archivo. Pequeña solución: jquery-howto.blogspot.com/2009/04/…

    usuario618168

    15 feb.

  • @meze: las llamadas entre dominios funcionan con jQuery. Pero, ¿cómo no puede funcionar con JavaScript simple, ya que jQuery está implementado en JavaScript? No tiene sentido para mí. ¿JQuery está usando algún tipo de solución desagradable?

    – Gruber

    12 dic. 12 a las 16:17

XMLHttpRequest estado 0 (responseText está vacío)
Abhishek_8

el estado es 0 cuando su archivo html que contiene el script se abre en el navegador a través del esquema de archivos. Asegúrese de colocar los archivos en su servidor (apache o tomcat) y luego ábralos a través del protocolo http en el navegador. (es decir http://localhost/miarchivo.html) Esta es la solución.

  • ¿Por qué esto está siendo votado negativo? ¡Es realmente cierto! Las solicitudes XHR de file:// URL de archivos también en file:// URL en realidad tienen estado == 0 en caso de éxito (probado en FF 24.0.5).

    –Daniel Roethlisberger

    31 dic. 14 a las 21:20


  • También obtengo el estado == 0 en caso de éxito en la versión 6.1.6 de Safari.

    – Plano

    22 feb.

  • Tengo estado = 0 (pero estado 200 en la red) usando Cargar complemento temporal en firefox

    – Joba Diniz

    22 ago. 17 en 17:24

  • sigue siendo una respuesta válida. La respuesta HTTP es 200 para esquemas remotos reales (http et al.) y 0 para archivos locales (file:// esquema). Obviamente, primero debe permitir la carga de archivos locales al deshabilitar CORS.

    – pid

    08 nov.

  • @DanielRoethlisberger FYI su respuesta ya no se construye

    – jdero

    5 de enero a las 0:12

XMLHttpRequest estado 0 (responseText está vacío)
Prisión

La causa de tus problemas es que está intentando hacer una llamada entre dominios y falla.

Si está haciendo un desarrollo de host local, puede hacer llamadas entre dominios; lo hago todo el tiempo.

Para Firefox, debe habilitarlo en sus ajustes de configuración

signed.applets.codebase_principal_support = true

Luego agregue algo como esto a su código abierto XHR:

  if (isLocalHost()){
    if (typeof(netscape) != 'undefined' && typeof(netscape.security) != 'undefined'){
      netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');
    }
  }

Para IE, si no recuerdo mal, todo lo que tiene que hacer es habilitar la configuración de Seguridad del navegador en “Varios → Acceder a fuentes de datos en todos los dominios” para que funcione con ActiveX XHR.

IE8 y superior también agregaron capacidades de dominio cruzado a los objetos XmlHttpRequest nativos, pero aún no he jugado con ellos.

  • En caso de que alguien lo necesite, para Chrome debe iniciar una nueva instancia (sin ninguna ya abierta) y usar --allow-file-access-from-files

    – TheZ

    23 jun.


  • @TheZ: ¿Estás al 100%? Escuché que solo necesita ejecutar una nueva instancia de Chrome, con --allow-file-access-from-files cambiar, pero tu no tienes que cierre todas las demás instancias en ejecución. Exactamente como en el caso de Modo de incógnito de Chrome — puede usarlo, sin cerrar ninguna otra instancia en ejecución.

    – Trejder

    23 jul.

  • Parece que se ha eliminado la compatibilidad con ‘UniversalBrowserRead’, por lo que esta solución no es una opción.

    – Loren_

    09 oct.

  • Además, podría suceder cuando solicita una página http desde una página https (como una extensión en el navegador).

    – sibvic

    15 mar. 18 a las 13:41

  • me encuentro con este problema, A pesar de la página html y el script AJAX que residen en el mismo dominio. Pero extrañamente, solo está afectando algunos scripts, sobre todo cualquier script que acceda a los recursos de MongoDB. ¿Alguna pista de por qué es esto?

    –David Edwards

    15 ago. 18 en 19:05

En realidad, asegúrese de que su tipo de botón sea Botón no enviado, eso causó un conflicto de estado donde me encontré recientemente.

  • Hay un conflicto porque enviar un formulario tiene un comportamiento predeterminado que debe evitar si está manejando el evento y haciendo una llamada ajax usted mismo. Puede evitar el comportamiento predeterminado tomando el evento en su controlador y llamando e.preventDefault()

    – Jordania

    05 may. 15 en 19:29


XMLHttpRequest estado 0 (responseText está vacío)
alex robinson

Si el servidor responde a un método de OPCIONES y a GET y POST (cualquiera que esté usando) con un encabezado como:

Access-Control-Allow-Origin: *

Podría funcionar bien. Parece que en FireFox 3.5 y rekonq 0.4.0. Aparentemente, con ese encabezado y la respuesta inicial a OPCIONES, el servidor le dice al navegador: “Continúe y deje pasar esta solicitud entre dominios”.

XMLHttpRequest estado 0 (responseText está vacío)
andrea savojardo

Considere también el pide tiempo fuera:

Retorno del navegador moderno listoEstado=4 y sestado=0 si pasa demasiado tiempo antes de que el servidor responda.

  • @AndreaSavojardo: ¿Tiene alguna referencia (como una publicación en MDN) sobre si este comportamiento cumple con los estándares?

    – Alexander Abakumov

    06 feb.

  • @AndreaSavojardo Tengo readyState=4 y status=0 y el servidor no se está ejecutando, pero la alerta de error se muestra rápidamente… ¿cuánto tiempo pasa para “solicitar tiempo de espera”?

    usuario11751709

    21 dic. 19 a las 16:39

  • De qué estás hablando. ReadyState=4 significa terminado, los documentos lo dicen muy claramente desarrollador.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/…

    – Artem Nóvikov

    10 sep.

XMLHttpRequest estado 0 (responseText está vacío)
Geo

Agregar setRequestHeader("Access-Control-Allow-Origin","*") a la respuesta de su servidor.

  • @AndreaSavojardo: ¿Tiene alguna referencia (como una publicación en MDN) sobre si este comportamiento cumple con los estándares?

    – Alexander Abakumov

    06 feb.

  • @AndreaSavojardo Tengo readyState=4 y status=0 y el servidor no se está ejecutando, pero la alerta de error se muestra rápidamente… ¿cuánto tiempo pasa para “solicitar tiempo de espera”?

    usuario11751709

    21 dic. 19 a las 16:39

  • De qué estás hablando. ReadyState=4 significa terminado, los documentos lo dicen muy claramente desarrollador.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/…

    – Artem Nóvikov

    10 sep.

XMLHttpRequest estado 0 (responseText está vacío)
Reyán

Me había enfrentado a un problema similar. Todo estaba bien, el “estado listo” era 4, pero el “estado” era 0. Fue porque estaba usando un servidor portátil Apache PHP y mi archivo en el que usé el objeto “XMLHttpRequest” era un archivo html. Cambié la extensión del archivo a php y se resolvió el problema.

.

¿Ha sido útil esta solución?