SyntaxError:意外的令牌&在JSON中

时间:2016-07-05 02:37:33

标签: javascript angularjs json

我正在使用$http.get()执行GET请求,响应采用JSON格式,但对某些字符使用HTML编码,一个示例如下,“使用"进行编码

{
    "description":"invalid",
    "errorCode":"error.loginInvalid"
}

此外我正在使用$httpProvider.interceptors.push('httpErrorsInterceptor');,httpErrorsInterceptor将在responseError中显示错误信息。由于响应JSON未正确解码,因此在尝试处理它时,它将在控制台中显示SyntaxError: Unexpected token & in JSON。我想知道在处理时我们如何解码响应JSON?在$httpProvider

2 个答案:

答案 0 :(得分:1)

将html实体转换为文本的一种方法是创建一个dom元素,将字符串作为html注入并将其作为文本检索回来。 DOM解析器将比编写自己的

更好地进行转换
var str='{ "description":"invalid", "errorCode":"error.loginInvalid&quot"}'
var JSON = angular.element('<div>').html(str).text();

但由于上一个值

的额外引用,显示的示例仍然是无效的JSON

working demo with last &quot removed

答案 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