4

在最新版本的 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 ...
4

2 回答 2

1

我找到了一种通过将其添加到 Angular 应用程序来更改默认转换器的方法:

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

            return response;
        };

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

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

请参阅此问题/答案:AngularJS、$http 和 transformResponse

于 2014-10-15T12:04:19.480 回答
1

你应该使用

$http.defaults.transformResponse

你也不想用.push(). 你需要你的变压器在 Angular 的默认变压器之前完成它的工作。你应该.unshift()改用。

所以你的代码应该是

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

wheretransformResponse是将来自服务器的响应转换为正确 JSON 的函数。

于 2015-02-16T12:38:39.057 回答