Ответ 1
Вы можете перехватить ответы, добавив перехватчик в $httpProvider.interceptors
с помощью Angular 1.1.4+ (см. документацию здесь поиск перехватчиков).
Для определенного типа контента, такого как json, вы можете отклонить изменения или выбросить исключение, даже если вызов был успешным. Вы можете изменить response.data
, который также будет передан в ваш код контроллера:
myModule.factory('myHttpInterceptor', function ($q) {
return {
response: function (response) {
// do something on success
if(response.headers()['content-type'] === "application/json; charset=utf-8"){
// Validate response, if not ok reject
var data = examineJSONResponse(response); // assumes this function is available
if(!data)
return $q.reject(response);
}
return response;
},
responseError: function (response) {
// do something on error
return $q.reject(response);
}
};
});
myModule.config(function ($httpProvider) {
$httpProvider.interceptors.push('myHttpInterceptor');
});
ПРИМЕЧАНИЕ. Вот оригинальный ответ для версий до версии 1.1.4 (responseInterceptors
устарели с помощью Angular 1.1.4):
Может быть, есть лучший способ, но я думаю, что вы можете сделать что-то похожее на этот пост с помощью HTTP-перехватчика (описанный здесь) (для определенного типа контента, такого как json), где вы потенциально отклоняете изменения или генерируете исключение, даже несмотря на то, что вызов был успешным. Вы можете изменить response.data
, который также будет передан в ваш код контроллера.
myModule.factory('myHttpInterceptor', function ($q) {
return function (promise) {
return promise.then(function (response) {
// do something on success
if(response.headers()['content-type'] === "application/json; charset=utf-8"){
// Validate response if not ok reject
var data = examineJSONResponse(response); // assumes this function is available
if(!data)
return $q.reject(response);
}
return response;
}, function (response) {
// do something on error
return $q.reject(response);
});
};
});
myModule.config(function ($httpProvider) {
$httpProvider.responseInterceptors.push('myHttpInterceptor');
});