Est-il possible d'attraper failed to load resource: net::ERR_CONNECTION_REFUSED
, J'ai essayé:
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 fonction fail pourrait intercepter, mais je n'ai aucune information sur l'erreur, que ce soit:
ou quoi que ce soit d'autre .. la question serait, comment obtenir le genre d'erreur?
J'ai même essayé d'atteindre l'objectif en utilisant 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);
}
L'extrait ci-dessus ne donne que le traitement d'erreur générique, alors que je ne comprends pas la raison exacte de l'erreur. L'instruction try...catch
Ne parvient pas à intercepter, car aucune des fonctions contenues dans le bloc try ne renvoie d'exceptions. Il semble que XMLHttpRequest
s'exécute dans un thread d'arrière-plan, son erreur d'exécution est donc impossible à capturer.
Comme jQuery est une bibliothèque qui est en fait un javascript, elle se comportera également de la même manière pour $.post()
, car $.post()
utilise également XMLHttpRequest
derrière le rideau.
Vous trouverez ci-dessous la version de jQuery, qui gérera également les erreurs génériques, car nous ne pouvons pas savoir exactement la raison de l’erreur.
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>
Conclusion
Comme javascript XMLHttpRequest()
n'est toujours pas assez efficace pour gérer différents états d'erreur, nous ne pouvons pas connaître la raison exacte de l'erreur réseau pour les requêtes AJAX. Nous ne pouvons capturer que les erreurs génériques et certains autres codes d'état connus comme
"404" pour fichier non trouvé
"500" pour le serveur ne répond pas
Plus d'informations peuvent être obtenues de https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
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();
Le gestionnaire d'événement onerror est un autre moyen d'obtenir des erreurs plus faciles à comprendre ultérieurement. D'après ce que j'ai vu, cela ne vous donnera pas plus d'informations utiles que la solution de Kirans.
Vous avez accès à en ligne/hors ligne 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();
Avant d’appeler ajax, examinez "_ Network_state"