日期:2014-05-16  浏览次数:20320 次

JSON ajax SyntaxError: JSON.parse: unexpected character 异常

JSON ajax SyntaxError: JSON.parse: unexpected character 异常

出现这个错误,说明json格式不对或者json里面的数据有字符的问题。

我出现这个问题是因为在后台取的一条数据数据,使用json进行数据封装时,实体中关联的实体进行了数据的懒加载,导致json中data的格式被破坏,缺少"[]",所以前台识别不了。虽然请求成功,并且返回了数据。但是success中没有执行。

后来看到网上说使用 $.parseJSON(data) 有一个请求是成功了。本以为另一个也会成功,结果抛出 JSON ajax SyntaxError: JSON.parse: unexpected character 异常。这就很郁闷了。

记得注释掉ajax中的?dataType: "json",

按理说。两个ajax写的几乎都一样,应该是没问题的。然后就比较了下后台方法中的封装。

找出了原因。

//jsonString = JSONUtil.getDeepJSONString(jsonData); 使用此行的话,就已经封装成了一个json数据格式吧,本人猜测。
jsonString = JSONUtil.getJSONString(jsonData); ?此行很有可能是返回一个json格式的字符串。然后前台使用parse转一下,转成json格式的。

return jsonString;

随后,前台成功。

{"code":null,"data":{"author":"aaaaaa","class":"com.citycloud.apps.cms.entity.CmsContent","column":{"class":"com.citycloud.apps.cms.entity.CmsColumn_$$_javassist_43","colAlias":"zwxxxw","colDesc":"1","colId":123,"colName":"政闻","colProp":"1","colStatus":"1","indexTemplate":"1","url":null,"validDate":"2014-01-21 00:00:00"},"message":"查询成功","success":true,"totalCount":1}

中间的数据太长了,就干掉了一部分,这是前台没有转换前的,

Object { data={...}, message="查询成功", success=true, 更多...}这是熟悉的控制台输出哦。说明成功了。

?

下面展示一下前台ajax,借以参考:

function tellUs(){
$.ajax({
url: baseP + '/aaaa/andAs',
// data:{},
// dataType:"json",
async:false,
success:function(data){
var da = $.parseJSON(data);
$("#tell").append(da.data.content);
}
});
}

后台的话,就上面的最后使用jsonString = JSONUtil.getJSONString(jsonData);