Lorsqu'une demande AJAX est soumise à un site, les erreurs côté serveur sont facilement gérées avec l'approche de promesse jQuery. .done()
, .fail()
, etc. Cependant, pour certaines demandes (par exemple, vers un site non valide ou qui n'accepte pas les demandes d'origine croisée), une exception se produit immédiatement lors de l'appel. Voici un exemple d'une erreur dans la console:
XMLHttpRequest ne peut pas charger
http://someotherserver/api/blahblah
. Originehttp://localhost:52625
n'est pas autorisé par Access-Control-Allow-Origin.
Oui, je connais CORS ... ce n'est pas le problème. Ce que je fais en fait, c'est d'essayer un appel API Web pour tester si l'IP/le nom du serveur est correct
Je connais l'option error
dans la syntaxe de requête jQuery:
$.ajax({
url: remoteURL,
type: 'GET',
error: function (err) {
console.log("AJAX error in request: " + JSON.stringify(err, null, 2));
}
}).etc.etc.
L'erreur est gérée ici, mais les exceptions sont toujours enregistrées dans la console. Il a semblé raisonnable d'envelopper ce qui précède dans un try-catch
bloquer, mais cela ne semble pas aider.
J'ai trouvé cette question , mais la solution consiste à pirater le code jQuery. Il y a sûrement un meilleur moyen d'attraper ces erreurs et de ne pas obstruer les journaux de la console ??
essaye ça:
$.ajax({
url: remoteURL,
type: 'GET',
error: function (err) {
console.log("AJAX error in request: " + JSON.stringify(err, null, 2));
}
}).always(function(jqXHR, textStatus) {
if (textStatus != "success") {
alert("Error: " + jqXHR.statusText);
}
});
Écouteur XHR:
$.ajax({
url: remoteURL,
type: 'GET',
xhr: function(){
var xhr = new window.XMLHttpRequest();
xhr.addEventListener("error", function(evt){
alert("an error occured");
}, false);
xhr.addEventListener("abort", function(){
alert("cancelled");
}, false);
return xhr;
},
error: function (err) {
console.log("AJAX error in request: " + JSON.stringify(err, null, 2));
}
});
Vous pouvez utiliser la console de développeur Web dans Google Chrome. Appuyez sur F12. Et utilisez l'onglet Réseaux pour vérifier la réponse, et pour les erreurs JavaSvript et jQuery et Ajax, vous pouvez utiliser l'onglet Console. :)
Essayez ceci en ajoutant à votre fonction ajax:
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);