加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

AngularJS拦截所有$http JSON响应

发布时间:2020-12-17 08:57:37 所属栏目:安全 来源:网络整理
导读:我有一个使用AngularJS构建的应用程序和一个以JSON形式传递所有请求的服务器端后端。每个请求都包装在一个JSON容器中,该容器包含一个数据变量,其中包含特定于请求的数据。其他数据,用于保持应用程序中的状态和控制,检查错误和成功消息,并检查会话标志。
我有一个使用AngularJS构建的应用程序和一个以JSON形式传递所有请求的服务器端后端。每个请求都包装在一个JSON容器中,该容器包含一个数据变量,其中包含特定于请求的数据。其他数据,用于保持应用程序中的状态和控制,检查错误和成功消息,并检查会话标志。所有这些其他变量与EVERY请求一起提供,并且在数据变量之前首先检查。

现在我有一个方法来检查JSON响应的内容,然后检查数据本身。

$http.get('something.json').success(function(response) {
   var data = examineJSONResponse(response);
   //do the data stuff
});

这工作和examJSONResponse检查代码,如果有错误,那么它抛出一个异常,并重新加载页面使用window.location.href。

有什么办法,我可以在AngularJS中自动化这样,每次一个$ http调用,然后它检查这个,只返回数据变量内容作为JSON响应?

你可以通过添加拦截器到$ httpProvider.interceptors与Angular 1.1.4拦截响应(见文档 here搜索拦截器)。

对于像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弃用):

也许有一个更好的方法,但我认为你可以做类似于this post与http响应拦截器(描述here)(对于像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');
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读