web-dev-qa-db-fra.com

Comment puis-je intercepter les erreurs jQuery AJAX?

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. Origine http://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 ??

21
AR.

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));
    }
});
10
Mr.Manhattan

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);
3
Shreejibawa