web-dev-qa-db-fra.com

Traitement des erreurs dans AngularJS http get puis construct

Comment gérer une erreur HTTP, par exemple 500, lorsqu’on utilise la construction "http get then" d’AngularJS (promesses)?

$http.get(url).then(
    function(response) {
        console.log('get',response)
    }
)

Le problème est que, pour toute réponse non 200 HTTP, la fonction interne n'est pas appelée.

65
Federico Elles

Vous devez ajouter un paramètre supplémentaire:

$http.get(url).then(
    function(response) {
        console.log('get',response)
    },
    function(data) {
        // Handle error here
    })
140
laurent

Vous pouvez rendre ce bit plus propre en utilisant:

$http.get(url)
    .then(function (response) {
        console.log('get',response)
    })
    .catch(function (data) {
        // Handle error here
    });

Similaire à @ this.lau_ answer, approche différente.

54
Ravish

http://docs.angularjs.org/api/ng.$http

$http.get(url).success(successCallback).error(errorCallback);

Remplacez successCallback et errorCallback par vos fonctions.

Edit: La réponse de Laurent est plus correcte étant donné qu'il utilise then. Pourtant, je laisse cela ici comme une alternative pour les gens qui vont visiter cette question.

13
Umur Kontacı

Si vous voulez gérer les erreurs de serveur globalement, vous pouvez enregistrer un service d'intercepteur pour $ httpProvider:

$httpProvider.interceptors.Push(function ($q) {
    return {
        'responseError': function (rejection) {
            // do something on error
            if (canRecover(rejection)) {
                return responseOrNewPromise
            }
            return $q.reject(rejection);
        }
    };
});

Docs : http://docs.angularjs.org/api/ng.$http

3
Konstantin Tarkus

Essaye ça

function sendRequest(method, url, payload, done){

        var datatype = (method === "JSONP")? "jsonp" : "json";
        $http({
                method: method,
                url: url,
                dataType: datatype,
                data: payload || {},
                cache: true,
                timeout: 1000 * 60 * 10
        }).then(
            function(res){
                done(null, res.data); // server response
            },
            function(res){
                responseHandler(res, done);
            }
        );

    }
    function responseHandler(res, done){
        switch(res.status){
            default: done(res.status + ": " + res.statusText);
        }
    }
2
Naren Chejara

Je ne pouvais pas vraiment travailler avec ce qui précède. Donc, cela pourrait aider quelqu'un.

$http.get(url)
  .then(
    function(response) {
        console.log('get',response)
    }
  ).catch(
    function(response) {
    console.log('return code: ' + response.status);
    }
  )

Voir aussi le $http response paramètre .

0
serv-inc