Angular 1.3.0支持JSON响应,如何在Angular之前覆盖它或预先解析响应?

时间:2014-10-15 06:52:59

标签: javascript json angularjs angular-http angular-http-interceptors

在最新版本的Angular(v1.3.0)中,他们为application / json添加了内容类型标头的修复程序。现在我的所有响应都会出错,因为它们不是有效的JSON。我知道我应该改变后端以使用纯文本标题进行响应,但我现在无法控制它。在Angular尝试解析之前,我有什么方法可以预先解析响应吗?

我认为这是他们所做的修复: https://github.com/angular/angular.js/commit/7b6c1d08aceba6704a40302f373400aed9ed0e0b

我遇到的问题是我从后端获得的响应有一个与Angular正在检查的保护前缀不匹配的保护前缀。

我试图在配置中添加一个http拦截器,但这没有帮助,仍然在Angular本身之后解析。

$httpProvider.interceptors.push('parsePrefixedJson');

我在控制台中遇到的错误(它来自Angular中的JSON字符串的反序列化):

SyntaxError: Unexpected token w
at Object.parse (native)
at fromJson ...

2 个答案:

答案 0 :(得分:1)

我找到了一种方法来更改默认变换器,方法是将其添加到Angular应用程序中:

app.run(['$http',
    function($http) {
        var parseResponse = function(response) {
            // parse response here

            return response;
        };

        $http.defaults.transformResponse = [parseResponse];
    }
]);

这将覆盖默认行为,如果只需要转换选定的响应,也可以将其设置为空数组。

请参阅此问题/答案:AngularJS, $http and transformResponse

答案 1 :(得分:1)

你应该使用

$http.defaults.transformResponse

您也不想使用.push()。在angular的默认变换器之前,你需要你的变压器来做它的事情。您应该使用.unshift()代替。

所以你的代码应该是

$http.defaults.transformResponse.unshift(transformResponse);

其中transformResponse是一个函数,它将服务器的响应转换为适当的JSON。