¿Hay alguna manera de capturar failed to load resource: net::ERR_CONNECTION_REFUSED , lo he intentado:
try { $.post('',{},function(res) { }).fail(function (xhr, textStatus, errorThrown) { xhr.textStatus = textStatus; xhr.errorThrown = errorThrown; console.log('fail',xhr); // how to get the 'ERR_CONNECTION_REFUSED' or anything else as string? }); } catch(e) { console.log('catch',e); }La función de falla podría detectar, pero no obtuve información sobre el error, ya sea:
o cualquier otra cosa... la pregunta sería, ¿cómo obtener el tipo de error?
Incluso traté de lograr el objetivo usando javascript XMLHttpRequest()
var xhttp= new XMLHttpRequest(); try{ xhttp.onreadystatechange = function() { console.log(xhttp); if (xhttp.readyState == 4 && xhttp.status == 0) { alert("Unknown Error Occured. Server response not received."); } }; xhttp.open("POST", "http://localhost:8080/data", true); xhttp.send(); }catch(e){ console.log('catch', e); } El fragmento anterior solo brinda un manejo genérico de errores, mientras que no obtengo la razón exacta detrás del error. La sentencia try...catch no detecta nada, porque ninguna de las funciones dentro del bloque try genera excepciones. Parece que XMLHttpRequest se está ejecutando en un subproceso en segundo plano, por lo que su error de tiempo de ejecución no se puede capturar.
Como jQuery es una biblioteca que en realidad es un javascript, también se comportará igual para $.post() porque $.post() también usa XMLHttpRequest detrás de la cortina.
A continuación se muestra la versión de jQuery, que también manejará el error genérico, ya que no podemos saber exactamente el motivo del error.
try { $.post('http://localhost:8080/data', {}, function(res) {}).fail(function() { alert("Unknown Error Occured. Server response not received."); }); } catch (e) { console.log('catch', e); } <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>Conclusión
Como javascript XMLHttpRequest() todavía no es lo suficientemente eficiente para manejar diferentes estados de error, no podemos saber el motivo exacto detrás del error de red para las solicitudes AJAX. Solo podemos capturar errores genéricos y algunos otros códigos de estado conocidos como
"404" para el archivo no encontrado
"500" para el servidor no responde
Se puede saber más en https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
Actualización: Ha pasado mucho tiempo desde la última vez que actualicé esta publicación. Vi pocas respuestas que intentan lograr objetivos similares pero aún con muy poco éxito. Como se mencionó en algunas de las respuestas en este hilo, también podemos usar la función de devolución de llamada XMLHttpRequest.onerror para detectar algunos errores genéricos, pero si todavía está trabajando con IE, entonces tal vez no funcione.
var xhttp= new XMLHttpRequest(); xhttp.onreadystatechange = function() { console.log(xhttp); xhttp.onerror = function(e){ alert("Unknown Error Occured. Server response not received."); }; xhttp.open("POST", "http://localhost:8080/data", true); xhttp.send();Una forma alternativa de obtener errores que podría ser más fácil de entender más adelante es el controlador de eventos onerror. Por lo que he visto, no te dará más información útil que la solución de Kiran.
Tienes acceso en línea/fuera de línea en Chrome.
var _Network_state = true; function updateIndicator() { // Show a different icon based on offline/online if (navigator.onLine) { // true|false // ... do other stuff _Network_state = true; } else { // ... do other stuff _Network_state = false; } console.info(_Network_state ? 'Online' : 'Offline'); } // Update the online status icon based on connectivity window.addEventListener('online', updateIndicator); window.addEventListener('offline', updateIndicator); updateIndicator();Antes de llamar a ajax, inspeccione " _Network_state "