我正在使用$http.get()
执行GET请求,响应采用JSON格式,但对某些字符使用HTML编码,一个示例如下,“使用"
进行编码
{
"description":"invalid",
"errorCode":"error.loginInvalid"
}
此外我正在使用$httpProvider.interceptors.push('httpErrorsInterceptor');
,httpErrorsInterceptor将在responseError
中显示错误信息。由于响应JSON未正确解码,因此在尝试处理它时,它将在控制台中显示SyntaxError: Unexpected token & in JSON
。我想知道在处理时我们如何解码响应JSON
?在$httpProvider
?
答案 0 :(得分:1)
将html实体转换为文本的一种方法是创建一个dom元素,将字符串作为html注入并将其作为文本检索回来。 DOM解析器将比编写自己的
更好地进行转换var str='{ "description":"invalid", "errorCode":"error.loginInvalid""}'
var JSON = angular.element('<div>').html(str).text();
但由于上一个值
的额外引用,显示的示例仍然是无效的JSON答案 1 :(得分:0)
响应的内容类型为text/html;charset=UTF-8
,但angularjs将解析为JSON,因为它以{
开头,以}
结尾,而内容编码为HTML,因此,当解析器遇到&
字符时,它会显示语法错误。
一种解决方案是在transformResponse
中提供$http.config
,具体如下:
$http({
method: 'get',
url: yourURL,
transformResponse: transformResponse
});
function transformResponse(data) {
var json = angular.element('<div>').html(data).text();
return JSON.parse(json);
}
如果您想转换所有回复,可以将transformResponse
添加到$httpProvider.defaults.transformResponse
。