在AngularJS http处理错误然后构造

在使用AngularJS“http get then”构造(承诺)时,如何处理HTTP错误,例如500?

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

问题是,对于任何非HTTP响应,不调用内部函数。

你需要添加一个额外的参数:

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

你可以使这个更清洁一点:

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

类似@ this.lau_答案,不同的方法。

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

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

用你的函数replacesuccessCallback和errorCallback。

编辑:考虑到他正在使用洛朗的答案是更正确的。 然而,我将这里留下来作为参观这个问题的人们的替代select。

如果您想要全局处理服务器错误,您可能需要为$ httpProvider注册一个拦截器服务:

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

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

尝试这个

 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); } }