Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript SyntaxError:意外的令牌&;JSON格式_Javascript_Angularjs_Json - Fatal编程技术网

Javascript SyntaxError:意外的令牌&;JSON格式

Javascript SyntaxError:意外的令牌&;JSON格式,javascript,angularjs,json,Javascript,Angularjs,Json,我正在使用$http.get()来执行get请求,响应是JSON格式的,但是对于某些字符使用HTML编码,下面是一个示例,“使用编码” 我还使用了$httpProvider.interceptors.push('httpErrorsInterceptor'),httpErrorsInterceptor将在responseError中显示错误信息。由于响应JSON未正确解码,当尝试处理它时,它将在控制台中显示SyntaxError:Unexpected-token&in-JSON。我想知道在处理时

我正在使用
$http.get()
来执行get请求,响应是JSON格式的,但是对于某些字符使用HTML编码,下面是一个示例,“使用
编码”


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

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

var str='{ "description":"invalid", "errorCode":"error.loginInvalid&quot"}'
var JSON = angular.element('<div>').html(str).text();
var str='{“description”:“invalid”,“errorCode”:“error.loginInvalid”quot}
var JSON=angular.element(“”).html(str.text();
但所示的示例仍然是无效的JSON,因为最后一个值上有额外的引号


响应的内容类型为
text/html;charset=UTF-8
,但angularjs将解析为JSON,因为它以
{
开头,以
}
结尾,而内容编码为HTML,因此当解析器遇到
&
字符时,它将显示语法错误

一种解决方案是在
$http.config
中提供
transformResponse
,如下所示:

$http({
  method: 'get',
  url: yourURL,
  transformResponse: transformResponse
});

function transformResponse(data) {
  var json = angular.element('<div>').html(data).text();
  return JSON.parse(json);
}
$http({
方法:“get”,
url:yourURL,
transformResponse:transformResponse
});
功能响应(数据){
var json=angular.element(“”).html(data.text();
返回JSON.parse(JSON);
}

如果要转换所有响应,可以将
transformResponse
添加到
$httpProvider.defaults.transformResponse

是否控制源?如果是这样的话……首先是怎么做到的?这是无效的json@charlietfl是的,它是JSON,但是一些特殊字符是经过编码的。那么为什么不删除额外的编码呢?(尤其是它毫无意义)不,不是。JSON规则对引号非常清楚。这些是html实体,而不是包含每个键/值的引号。如果您使用适当的序列化程序,它将正确转义内容,如果您需要值中的html实体…仅编码值…而不是整个json字符串抱歉,我删除了最后一个值上的额外引号~OK,如果没有了,这应该行得通……结果是json.parse()。仍然没有理由让xml转换器这样做我试图找到一些要处理的点,但是$http在前面被处理为JSON,所以当我得到参数时,它已经抛出了语法错误~您可能需要像$http拦截器那样将其视为数据类型文本。或者编写自己的XMLhttprequest。这是一个非常丑陋的问题,毫无意义。有些人只是懒惰或者不理解JSON规范
$http({
  method: 'get',
  url: yourURL,
  transformResponse: transformResponse
});

function transformResponse(data) {
  var json = angular.element('<div>').html(data).text();
  return JSON.parse(json);
}