Ответ 1
Вам нужно добавить дополнительный параметр:
$http.get(url).then(
function(response) {
console.log('get',response)
},
function(data) {
// Handle error here
})
Как я могу обработать ошибку HTTP, например. 500, при использовании конструкции AngularJS "http get then" (promises)?
$http.get(url).then(
function(response) {
console.log('get',response)
}
)
Проблема заключается в том, что при любом ответе HTTP не на 200 внутренняя функция не вызывается.
Вам нужно добавить дополнительный параметр:
$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);
Замените successCallback и errorCallback своими функциями.
Изменить: ответ Лорана вернее, учитывая, что он использует then
. Тем не менее я оставляю это здесь как альтернативу для людей, которые посетят этот вопрос.
Если вы хотите обрабатывать ошибки сервера глобально, вы можете захотеть зарегистрировать службу перехватчика для $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);
}
}
Я не мог действительно работать с вышеупомянутым. Так что это может кому-то помочь.
$http.get(url)
.then(
function(response) {
console.log('get',response)
}
).catch(
function(response) {
console.log('return code: ' + response.status);
}
)
Смотрите также параметр $http response
.