日期:2014-05-18  浏览次数:20681 次

json数据在前台使用问题,help!!
我在前台使用json数据时遇见了问题,现在请大家帮忙看看。
action中我把一个对象转为json格式,用responsewrite写到前台的代码如下:

ChartPageInfo info = chartInfoHelper(alist,"1",f);
JSONArray ja = JSONArray.fromObject(info);
System.out.println(ja);//打印出的数据是:[{"categories":"['政务内网门户','电子邮件系统','综合办公平台','通讯录']","data":"[11,4,34,19]","title_text":""}]
responseWrite(ja.toString());


前台使用代码如下:

$.post("queryuserchart.action",{
    curPage:$(this).val()
  },
      function(data,status){
      alert(data.categories);//undefine
if('success'==status){
drawChart(data.categories,data.data);
}
 },
 "json"
);

alert data.categories为undefine.
JSON

------解决方案--------------------
对了,你返回的是一个json数组,不能直接取属性,需要在循环中获取!
------解决方案--------------------
JSONArray对应的是JSON数组,后台使用JSONObject.fromObject()。
------解决方案--------------------

//json 中 "[]"代表数据  "{}" 代表对象 两者可以相互嵌套 
//访问json数据时、也是根据[]跟{}来判断的
//[]开头、那么就要加上下标访问
jsonStr = [{"categories":"['政务内网门户','电子邮件系统','综合办公平台','通讯录']","data":"[11,4,34,19]","title_text":""}];
alert(jsonStr[0].categories);  
for(var i = 0; i < jsonStr.length; i++){
var jsonS = jsonStr[i];
alert(jsonS.categories);   
}  

//如果你没有更多的对象了、那么把外面的“[]”去掉就可以直接访问对象了
jsonStr2 = {"categories":"['政务内网门户','电子邮件系统','综合办公平台','通讯录']","data":"[11,4,34,19]","title_text":""};
alert(jsonStr2.data); 

------解决方案--------------------
引用:

//json 中 "[]"代表数据  "{}" 代表对象 两者可以相互嵌套 
//访问json数据时、也是根据[]跟{}来判断的
//[]开头、那么就要加上下标访问
jsonStr = [{"categories":"['政务内网门户','电子邮件系统','综合办公平台','通讯录']","data":"[11,4,34,19]","title_text":""}];