深夜询问ajax返回json数据问题

CloudStrifers 2014-04-26 12:47:56
项目是ssh框架,action中List<Article> article 从数据库获得,我用JSONArray jsonArray=new JSONArray();
jsonArray=JSONArray.fromObject(article);,变成Json格式,我也输出来看,格式没问题,[{"content":"<p> 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>";
}

}

});
}

大家能帮忙看看到底哪儿出错了吗?找了半天了、都石化了、
...全文
415 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
CloudStrifers 2014-04-26
  • 打赏
  • 举报
回复
恩啊,对的对的,是的是的。
引用 12 楼 wlwlwlwl015 的回复:
[quote=引用 8 楼 a7223923 的回复:] 大哥、终于解决了、泪奔了、昨天整了了一天、但是你的方法还有个小地方要改的、因为response.getWriter().write(jsonArray); , write写入的是string或者int,所以我是这样写的,response.getWriter().write(jsonArray.toString()); 这样就写入了、前台ajax就可以接收到了、看来果然是struts 的支持不够好啊 [quote=引用 7 楼 a7223923 的回复:] 好的、我试试你的方法看看、 [quote=引用 6 楼 wlwlwlwl015 的回复:] [quote=引用 4 楼 a7223923 的回复:] 跪求大神指点
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字符串之后写这段代码:

HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write(jsonArray);
这样问题就解决了,你在前台alert一下ajax回调函数的参数,就能看到响应文本了。你也可以通过firebug去看你的完整的get请求的过程,包括请求的参数以及前台得到的响应。[/quote][/quote][/quote]、 解决了就行,我上面已经告诉过你 是得到Json字符串之后... 多注意一下细节 这种方法还是比较好用的[/quote]
小灯光环 2014-04-26
  • 打赏
  • 举报
回复
引用 8 楼 a7223923 的回复:
大哥、终于解决了、泪奔了、昨天整了了一天、但是你的方法还有个小地方要改的、因为response.getWriter().write(jsonArray); , write写入的是string或者int,所以我是这样写的,response.getWriter().write(jsonArray.toString()); 这样就写入了、前台ajax就可以接收到了、看来果然是struts 的支持不够好啊 [quote=引用 7 楼 a7223923 的回复:] 好的、我试试你的方法看看、 [quote=引用 6 楼 wlwlwlwl015 的回复:] [quote=引用 4 楼 a7223923 的回复:] 跪求大神指点
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字符串之后写这段代码:

HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write(jsonArray);
这样问题就解决了,你在前台alert一下ajax回调函数的参数,就能看到响应文本了。你也可以通过firebug去看你的完整的get请求的过程,包括请求的参数以及前台得到的响应。[/quote][/quote][/quote]、 解决了就行,我上面已经告诉过你 是得到Json字符串之后... 多注意一下细节 这种方法还是比较好用的
CloudStrifers 2014-04-26
  • 打赏
  • 举报
回复
你的方法。我刚也试了,好像也不行,我勒个去。
引用 9 楼 zhulin2012 的回复:
var dataRole = eval(data.jsonArray);
CloudStrifers 2014-04-26
  • 打赏
  • 举报
回复
你的方法我后来也试了下,不行,这可能只是struts的问题了。没办法了。。
引用 5 楼 q2425940 的回复:
jsonArray这个变量要写在方法外面 作为action的属性(额。。。是这么叫的吧) 才可以通过struts传到客户端 不知道是不是这个原因 我也新手 不对勿喷
不是太高的手 2014-04-26
  • 打赏
  • 举报
回复
var dataRole = eval(data.jsonArray);
CloudStrifers 2014-04-26
  • 打赏
  • 举报
回复
大哥、终于解决了、泪奔了、昨天整了了一天、但是你的方法还有个小地方要改的、因为response.getWriter().write(jsonArray); , write写入的是string或者int,所以我是这样写的,response.getWriter().write(jsonArray.toString()); 这样就写入了、前台ajax就可以接收到了、看来果然是struts 的支持不够好啊
引用 7 楼 a7223923 的回复:
好的、我试试你的方法看看、 [quote=引用 6 楼 wlwlwlwl015 的回复:] [quote=引用 4 楼 a7223923 的回复:] 跪求大神指点
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字符串之后写这段代码:

HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write(jsonArray);
这样问题就解决了,你在前台alert一下ajax回调函数的参数,就能看到响应文本了。你也可以通过firebug去看你的完整的get请求的过程,包括请求的参数以及前台得到的响应。[/quote][/quote]
CloudStrifers 2014-04-26
  • 打赏
  • 举报
回复
好的、我试试你的方法看看、
引用 6 楼 wlwlwlwl015 的回复:
[quote=引用 4 楼 a7223923 的回复:] 跪求大神指点
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字符串之后写这段代码:

HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write(jsonArray);
这样问题就解决了,你在前台alert一下ajax回调函数的参数,就能看到响应文本了。你也可以通过firebug去看你的完整的get请求的过程,包括请求的参数以及前台得到的响应。[/quote]
小灯光环 2014-04-26
  • 打赏
  • 举报
回复
引用 4 楼 a7223923 的回复:
跪求大神指点
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字符串之后写这段代码:

HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write(jsonArray);
这样问题就解决了,你在前台alert一下ajax回调函数的参数,就能看到响应文本了。你也可以通过firebug去看你的完整的get请求的过程,包括请求的参数以及前台得到的响应。
q2425940 2014-04-26
  • 打赏
  • 举报
回复
jsonArray这个变量要写在方法外面 作为action的属性(额。。。是这么叫的吧) 才可以通过struts传到客户端 不知道是不是这个原因 我也新手 不对勿喷
CloudStrifers 2014-04-26
  • 打赏
  • 举报
回复
跪求大神指点
CloudStrifers 2014-04-26
  • 打赏
  • 举报
回复
我把action的代码贴下吧 public String execute() throws Exception { List<Article> article ; username = article = articleService.queryMyFriendinfo(username, index, max); JSONArray jsonArray=new JSONArray(); jsonArray=JSONArray.fromObject(article); } 其他无关代码就没贴上来了,主要jsonArray配置在structs中type ="json",所以在ajax可以获取。
引用 1 楼 IT_163 的回复:
设置响应类型了吗 response.setContentType("application/json;utf-8"); 然后out.print(Json对象);
CloudStrifers 2014-04-26
  • 打赏
  • 举报
回复
不是的、我是在action,中,继承actionsupport类,之后又个List<article> , article是pojo类,是用ssh框架搭建的,不是继承httpservlet那个。
引用 1 楼 IT_163 的回复:
设置响应类型了吗 response.setContentType("application/json;utf-8"); 然后out.print(Json对象);
IT_163 2014-04-26
  • 打赏
  • 举报
回复
设置响应类型了吗 response.setContentType("application/json;utf-8"); 然后out.print(Json对象);

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧