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