首页 新闻 搜索 专区 学院

ajax中接收Json数据

0
悬赏园豆:15 [已解决问题] 解决于 2014-04-26 11:57

项目是ssh框架,action中List<Article> article 从数据库获得,我用JSONArray jsonArray=new JSONArray();
jsonArray=JSONArray.fromObject(article);,变成Json格式,我也输出来看,格式没问题,[{"content":"<p>&nbsp;today is 4.11<\/p>","date":"2014-04-11","hasread":0,"id":25,"title":"4.11","username":"123"}],在struts配置了、<action name="PersonInfoCenter" class="PersonInfoCenterAction" >
<result type="json" >
<param name="root">jsonArray</param>
</result>
</action>

但jsp界面就收不到、总是在这行显示for(var i= 0; i< dataRole.length;i++) cannot read property lenth of null , 我是用chrome 来观察js的,jsp中ajax代码如下:
function doStart()
{
$.ajax({
type: "GET",
url: "PersonInfoCenter.action",
data: "name=zah",
dataType: "json",
success:function(data){ //成功的处理函数
var dataRole = eval(data);
for(var i= 0; i< dataRole.length;i++)
{
var html = "<tr><td>";
html = html + dataRole[i].title+"</td><td>";
}

}

});
}

大家能帮忙看看到底哪儿出错了吗?找了半天了、都石化了、

Cloud_strife的主页 Cloud_strife | 初学一级 | 园豆:13
提问于:2014-04-26 00:53
< >
分享
最佳答案
0

你的ajax发送请求后,通过浏览器抓包发现action的响应数据是这个对吗?[{"content":"<p>&nbsp;today is 4.11<\/p>","date":"2014-04-11","hasread":0,"id":25,"title":"4.11","username":"123"}]

如此的话, 你看看返回的类型是object还是string  如果是string的话, 需要在ajax里边转换的做一个转换的

function doStart()
{
$.ajax({
type: "GET",
url: "PersonInfoCenter.action",
data: "name=zah",
dataType: "json",
success:function(data){ //成功的处理函数
var dataRole =$.parseJSON(data);
for(var i= 0; i< dataRole.length;i++)
{
var html = "<tr><td>";
html = html + dataRole[i].title+"</td><td>";
}

}
});
}

 

data = $.parseJSON(data);

收获园豆:15
telang | 小虾三级 |园豆:646 | 2014-04-26 08:44

好像还是不行啊、报错说是Uncaught TypeError: Object function (selector,context){return new jQuery.prototype.init(selector,context);} has no method 'parseJSON'

Cloud_strife | 园豆:13 (初学一级) | 2014-04-26 09:55

哦、换了个jquery版本、有这个方法、 但还是停在这里、Uncaught TypeError: Cannot read property 'length' of null

Cloud_strife | 园豆:13 (初学一级) | 2014-04-26 10:03

@Cloud_strife: 你的dataRole是null吧 你判断空了吗?

telang | 园豆:646 (小虾三级) | 2014-04-26 10:53

@_popc: 现在弄好了、我是在CSDN发帖得到另外一个回答、已经解决。方法是下面这样的、不过解决了就行。

Struts对ajax和json的支持不好,建议你不要用<result type="json" >这种标签了,告诉你简单的解决办法:
1.PersonInfoCenter.action 这个应该是你Ajax的入口Action,你在struts.xml只需要配置<action></action>,不需要配置这个action的result,在你的Action里面return null。
2.数据到前台的问题是通过流解决的,   jsonArray=JSONArray.fromObject(article); 得到你的Json字符串之后写这段代码:

Java code
 
?
1
2
3
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write(jsonArray);


这样问题就解决了,你在前台alert一下ajax回调函数的参数,就能看到响应文本了。你也可以通过firebug去看你的完整的get请求的过程,包括请求的参数以及前台得到的响应。

Cloud_strife | 园豆:13 (初学一级) | 2014-04-26 11:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册