我有一个使用 AngularJS 构建的应用程序和一个以 JSON 形式传递所有请求的服务器端后端。每个请求都包装在一个 JSON 容器中,该容器包含一个数据变量,其中包含特定于请求的数据。其他数据,用于在应用程序中保持状态和控制,检查错误和成功消息,并检查 session 标志。所有这些其他变量都随每个请求一起提供,并在数据变量之前首先检查。
现在我有一种方法可以先检查 JSON 响应的内容,然后再检查数据本身。
$http.get('something.json').success(function(response) {
var data = examineJSONResponse(response);
//do the data stuff
});
这可行,examineJSONResponse 会查看代码,如果有问题,它会抛出异常并使用 window.location.href 重新加载页面。
有什么方法可以在 AngularJS 中自动执行此操作,以便每次调用 $http 时都会对其进行检查并仅将数据变量内容作为 JSON 响应返回?
最佳答案
您可以通过使用 Angular 1.1.4+ 向 $httpProvider.interceptors
添加拦截器来拦截响应(请参阅文档 here 搜索拦截器)。
对于像 json 这样的特定内容类型,即使调用成功,您也可能会拒绝更改或抛出异常。您也可以在此处修改将传递给您的 Controller 代码的 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 中已弃用):
也许有更好的方法,但我认为您可以执行类似于 this post 的操作使用 http 响应拦截器(描述为 here)(对于特定的内容类型,如 json),即使调用成功,您也可能拒绝更改或抛出异常。您也可以在此处修改将传递给您的 Controller 代码的 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');
});
https://stackoverflow.com/questions/11956827/
相关文章:
jquery - 缺少 CORS header 'Access-Control-Allow-Ori
java - jackson - 将 java 列表写入 json 数组的最佳方法
javascript - bigint : 12000000000002539 is convert
javascript - 用单引号将字符串解析为 JSON?
ajax - 在 Chrome 中使用本地文件的 jQuery getJSON 问题
javascript - toJSON() 和 JSON.Stringify() 之间的区别