Respuestas:
Otro caso:
Podría ser posible obtener un código de estado 0
si ha enviado una llamada AJAX y se activó una actualización del navegador antes de obtener la respuesta AJAX . La llamada AJAX se cancelará y obtendrá este estado.
<form onsubmit="return false;">
e.preventDefault();
En mi experiencia, verá un estado de 0 cuando:
El mismo problema aquí cuando se usa <button onclick="">submit</button>
. Luego resuelto usando<input type="button" onclick="">
El código de estado 0 significa que no se puede acceder a la URL solicitada. Al cambiar http: // something / something a https: // something / something funcionó para mí. IE arroja un error que dice "permiso denegado" cuando el código de estado es 0, otros navegadores no.
Este artículo me ayudó. Estaba enviando el formulario a través de AJAX y olvidé usarlo return false
(después de mi solicitud de ajax), lo que condujo al envío del formulario clásico, pero extrañamente no se completó.
<form onsubmit="return false;">
Hizo el truco.
Debido a que esto aparece cuando googleas el estado 0 de ajax, quería dejar un consejo que solo me llevó horas de tiempo perdido ... Estaba usando ajax para llamar a un servicio PHP que resultó ser el REST_Controller de Phil para Codeigniter (no estoy seguro de si esto tiene nada que ver con eso o no) y seguí obteniendo el estado 0, listo estado 0 y me estaba volviendo loco. Lo estaba depurando y noté cuándo haría eco y regresaría en lugar de salir del mensaje que obtendría un éxito. Finalmente apagué la depuración e intenté y funcionó. Parece que el depurador xDebug con PHP estaba modificando de alguna manera la respuesta. Si está utilizando un depurador PHP, intente desactivarlo para ver si eso ayuda.
Encontré otro caso en el que jquery le da el código de estado 0: si por alguna razón XMLHttpRequest no está definido, obtendrá este error.
Obviamente, esto normalmente no sucederá en la web, pero un error en una versión nocturna de Firefox hizo que esto apareciera en un complemento que estaba escribiendo. :)
jQuery.ajax()
objeto XHR. La solicitud ni siquiera se creó en la llamada AJAX, todavía obteniendo f.open no es una función y un código de estado 0. Causado por: Estaba devolviendo un $.ajaxSettings.xhr
objeto $.ajaxSetup({xhr})
, pero en new window.XMLHttpRequest();
cambio resolví el problema
Tuve el mismo problema, y estaba relacionado con el bloqueo XSS (cross site scripting) por parte del navegador. Logré hacerlo funcionar utilizando un servidor.
Echa un vistazo a: http://www.daniweb.com/web-development/javascript-dhtml-ajax/threads/282972/why-am-i-getting-xmlhttprequest.status0
El envío de formularios "accidentales" fue exactamente el problema que estaba teniendo. Acabo de eliminar las etiquetas FORM por completo y eso parece solucionar el problema. ¡Gracias a todos!
Tuvimos un problema similar, el código de estado 0 en la llamada jquery ajax, y nos tomó todo el día diagnosticarlo. Como nadie había mencionado esta razón todavía, pensé en compartir.
En nuestro caso, el problema fue el bloqueo del servidor HTTP. Algún error en PHP estaba apagando Apache, por lo que en el extremo del cliente se veía así:
mirek@toccata:~$ telnet our.server.com 80
Trying 180.153.xxx.xxx...
Connected to our.server.com.
Escape character is '^]'.
GET /test.php HTTP/1.0
Host: our.server.com
Connection closed by foreign host.
mirek@toccata:~$
donde test.php contenía el código de bloqueo. No se devolvieron datos del servidor (ni siquiera los encabezados) => la llamada ajax se canceló con el estado 0.
En mi caso, fue causado por ejecutar mi servidor django http://127.0.0.1:8000/
pero enviando la llamada ajax a http://localhost:8000/
. Aunque esperaría que se asignaran a la misma dirección, no se aseguran de que no envíe sus solicitudes a localhost.
En nuestro caso, el enlace de la página cambió de https a http . Aunque los usuarios iniciaron sesión, se les impidió cargar con AJAX.
En mi caso, establecer la configuración url: ''
de ajax daría como resultado un código de estado 0 en ie8 .. Parece que es decir, simplemente no tolera dicha configuración.
Para mí, el problema fue causado por la empresa de alojamiento (Godaddy) que trataba las operaciones POST que tenían datos de respuesta sustanciales (algo más que decenas de kilobytes) como algún tipo de amenaza para la seguridad. Si ocurrieron más de 6 de estas en un minuto, el host se negó a ejecutar el código PHP que respondió a la solicitud POST durante el siguiente minuto. No estoy completamente seguro de lo que hizo el host en su lugar, pero vi, con tcpdump, un paquete de restablecimiento de TCP que viene como respuesta a una solicitud POST del navegador. Esto provocó que el código de estado http devuelto en un objeto jqXHR fuera 0.
Cambiar las operaciones de POST a GET solucionó el problema. No está claro por qué Godaddy impone este límite, pero cambiar el código fue más fácil que cambiar el host.
Creo que sé qué puede causar este error.
En google chrome hay una función incorporada para evitar ataques ddos para las extensiones de google chrome.
Cuando las solicitudes ajax devuelven continuamente más de 500 errores de estado, comienza a limitar las solicitudes.
Por lo tanto, es posible recibir el estado 0 en las siguientes solicitudes.
En un intento de ganar el premio por la razón más tonta del problema descrito.
Olvidando llamar
xmlhttp.send(); //yes, you need this pivotal line!
Sí, todavía recibía devoluciones de estado de cero de la llamada 'abierta'.
En mi caso, estaba obteniendo esto, pero solo en Safari Mobile. El problema es que estaba usando la URL completa ( http://example.com/whatever.php ) en lugar de la relativa (whatever.php). Sin embargo, esto no tiene ningún sentido, no puede ser un problema de XSS porque mi sitio está alojado en http://example.com . Supongo que Safari mira la parte http y la marca automáticamente como una solicitud insegura sin inspeccionar el resto de la URL.
En mi resolución de problemas, encontré que AJAX xmlhttpRequest.status == 0 podría significar que la llamada del cliente NO había llegado al servidor todavía, pero falló debido a un problema en el lado del cliente. Si la respuesta fue del servidor, entonces el estado debe ser el código de respuesta HTTP 1xx / 2xx / 3xx / 4xx / 5xx HTTP. En adelante, la resolución de problemas se centrará en el problema del CLIENTE, y podría ser una conexión de red de Internet inactiva o una de las descritas anteriormente por @Langdon.
Observe la consola del navegador mientras realiza la solicitud, si ve "La misma política de origen no permite leer el recurso remoto en http ajax ..... razón: falta el encabezado cors 'access-control-allow-origin'", entonces necesita agregue "Access-Control-Allow-Origin" en el encabezado de respuesta. exa: en java puede configurar esto como response.setHeader ("Access-Control-Allow-Origin", "*") donde la respuesta es HttpServletResponse.