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