在最新版本的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 ...
答案 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。