【发布时间】:2013-10-17 09:49:17
【问题描述】:
当从 URL 获取 json 时,我只想在数据有效时使用它。
到目前为止我使用JSON的方法:
$http.get(
'data/mydata.json'
+ "?rand=" + Math.random() * 10000,
{cache: false}
)
.then(function (result) {
try {
var jsonObject = JSON.parse(JSON.stringify(result.data)); // verify that json is valid
console.log(jsonObject)
}
catch (e) {
console.log(e) // gets called when parse didn't work
}
})
然而,在我进行解析之前,angular 已经失败了
SyntaxError: Unexpected token { 在 Object.parse (本机) 在 fromJson (http://code.angularjs.org/1.2.0-rc.2/angular.js:908:14) 在 $HttpProvider.defaults.defaults.transformResponse (http://code.angularjs.org/1.2.0-rc.2/angular.js:5735:18) 在http://code.angularjs.org/1.2.0-rc.2/angular.js:5710:12 在 Array.forEach (本机) 在 forEach (http://code.angularjs.org/1.2.0-rc.2/angular.js:224:11) 在 transformData (http://code.angularjs.org/1.2.0-rc.2/angular.js:5709:3) 在 transformResponse (http://code.angularjs.org/1.2.0-rc.2/angular.js:6328:17) 在 WrappedCallback (http://code.angularjs.org/1.2.0-rc.2/angular.js:9106:81) 在http://code.angularjs.org/1.2.0-rc.2/angular.js:9192:26 angular.js:7861
如何防止 Angular 抛出此错误,或者我应该如何处理验证 JSON?
更新:解决方案:
$http.get(
// url:
'data/mydata.json'
+ "?rand=" + Math.random() * 10000
,
// config:
{
cache: false,
transformResponse: function (data, headersGetter) {
try {
var jsonObject = JSON.parse(data); // verify that json is valid
return jsonObject;
}
catch (e) {
console.log("did not receive a valid Json: " + e)
}
return {};
}
}
)
【问题讨论】:
-
它的故事很好,但你能发布你的
result.data吗?或更好的 Plunker -
我也有同样的问题。它开始发生在返回的值之一上。问题是为什么json变得无效?服务器不应该正确编码吗?