Json+ajax+struts

前段时间做项目用到了json,今天我抽时间写了一个struts+ajax+json的例子. 个人感觉ajax+json在很大程度上降低了网络和服务器的IO,是一个很不错的组合! 1:json的lib我用的是json-lib-2.1-jdk15.jar,它可以在 2:struts用的是1.2 3:用到了js第三方prototype.js,主要用它包装的ajax对象,大家也没必要用这个,可以直接在js里用XMLHttpRequest。 以下是例子中所用到的相关文件: /// toolhxw.js /** @hxw 20080602 */ //回调函数 简单回调函数 function showesay(dataResponse) { var data = eval('(' + dataResponse.responseText + ')'); var str=''; str+='

  • '; str+='
  • '+data.param1;+'
  • '; str+='
  • '+data.param2;+'
  • '; str+='

'; document.getElementById("content").innerHTML=str; } //回调函数 复杂回调函数 function showcomplex(dataResponse) { var data = eval('(' + dataResponse.responseText + ')'); var str=''; for(var i=0;i'; str+='

  • '+data.js[i].age+'
  • '; str+='

  • '+data.js[i].name+'
  • '; str+='

  • '+data.js[i].address+'
  • '; str+='

    '; } document.getElementById("content").innerHTML=str; } //获取简单的json数据 function getesay(){ var url = 'test.do'; var pars = 'method=getEasy'; var ajax = new Ajax.Request( url, {method:'post',parameters:pars,onComplete:showesay} ); } //获取对象级复杂数据 function getcomplex(){ var url = 'test.do'; var pars = 'method=getComplex'; var ajax = new Ajax.Request( url, {method:'post',parameters:pars,onComplete:showcomplex} ); } ///struts-config.xml

    TestAction.java /* * Generated by MyEclipse Struts * Template path: templates/java/JavaClass.vtl */ package com.json.struts.action; import java.io.PrintWriter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.actions.DispatchAction; import net.sf.json.*; /** * @author hxw * */ public class TestAction extends DispatchAction { /** * 获取简单组合数据 */ public ActionForward getEasy(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { response.setContentType("text/html; charset=GBK"); try { PrintWriter out = response.getWriter(); //这里的数据拼装一般是从数据库查询来的 JSONObject jsonObject = new JSONObject(); jsonObject.put("param1", "变量一"); jsonObject.put("param2", "变量二"); out.print(jsonObject.toString()); out.flush(); out.close(); return null; }catch(Exception e) { e.printStackTrace(); return null; } } /** * 获取复杂组合数据 */ public ActionForward getComplex(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { response.setContentType("text/html; charset=GBK"); try { PrintWriter out = response.getWriter(); JSONObject obj = new JSONObject(); JSONArray js = new JSONArray(); //这里的数据拼装一般是从数据库查询来的 for(int i=0;i<3;i++) { JSONObject objtemp = new JSONObject(); objtemp.put("id", i); objtemp.put("age", "23"); objtemp.put("name", "test"+i); objtemp.put("address", "test"); js.add(objtemp); } obj.put("js",js); out.print(obj.toString()); }catch(Exception e) { e.printStackTrace(); System.out.print("消费明细json存储异常"); } return null; } } test.jsp

    <script src="js/prototype.js" type="text/javascript"></script> <script src="js/toolhxw.js" type="text/javascript"></script>

    正在获取内容...

    大家将这几个文件拷贝到你的myeclipse的web项目中,发布运行即可。 Feedback # re: JSON例子(struts+ajax+json) 回复 更多评论 2008-06-02 17:00 by 隔叶黄莺 请教个简单的问题,当 Java 给 JS 生成的字符串中含有单引号或双引号是如何处理的。 比如:out.println("var str='"+name+"'"); name 可能包含单引号也可能包含双引号,这个要交给 js 的输出一般如何写的,单引号或双引号怎么转义更简洁些。 # re: JSON例子(struts+ajax+json)[未登录] 回复 更多评论 2008-06-03 09:12 by 陕西boy json里面的数据全是键-值对,它和java有对应的数据类型。比如String,你在数据填装的时候全是按照java的规则,json只不过做为一种包装容器,暂时把你填装的东西放进来,比如: JSONObject jsonObject = new JSONObject(); jsonObject.put("param1", "/'变量一/""); jsonObject.put("param2", "变量二"); out.print(jsonObject.toString()); 你可以看一下运行结果,和java中的输出是一模一样的,也就是说对于逗号等操作完全由你的业务类负责,满足java语法。 # re: JSON实例(AJAX+STRUTS ) 回复 更多评论 2008-06-27 15:38 by young.jiandong 我现在碰到个问题,照你的代码改写我的程序时,如果中文信息是双数的话,正常,单数时,最后一个字就花了。 # re: JSON实例(AJAX+STRUTS ) 回复 更多评论 2008-06-30 16:12 by 陕西BOY 不会哪样的,我刚做了一个奇数和偶数汉字的例子,完全正常,你再看看你是否是其他设置而引起了这个问题~~~~~ # re: JSON实例(AJAX+STRUTS ) 回复 更多评论 2008-07-01 17:20 by young.jiandong 我的环境:tomcat5.5.23,struts1.2(采用了expresso5.5),jdk1.5,采用GBK过滤器。页面: var p = $('theId').value; var pas = "theId=" + p; new Ajax.Request('', { parameters: pas, method:'post', //encoding: 'GBK', onComplete: function(dataResponse){ var data = eval('(' + dataResponse.responseText + ')'); alert(data.fullName); $('fullName').value = data.fullName; } }); 程序处理部分: String theId = request.getParameter("theId"); ServletControllerRequest sr = (ServletControllerRequest) request; HttpServletResponse hres = (HttpServletResponse) sr.getServletResponse(); hres.setContentType("text/html;charset=GBK"); try{ String ss = new String(theId.getBytes("GBK"),"UTF-8"); //到了这步,如果中文信息为单数时,最后一个汉字就花了。 PrintWriter out = hres.getWriter(); JSONObject json = new com.jsite.json.JSONObject(); json.put("fullName", "Input : "+ss); out.print(json.toString()); out.flush(); out.close(); }catch(Exception e){ e.printStackTrace(); } # re: JSON实例(AJAX+STRUTS ) 回复 更多评论 2008-07-01 17:23 by young.jiandong 不好意思,我没讲明白,我的意思是通过ajax得到提交信息时才会出现这个情况。 # re: JSON实例(AJAX+STRUTS ) 回复 更多评论 2008-07-01 17:45 by young.jiandong 参考 http://blog.csdn.net/zhangyunbo1116/archive/2007/04/29/1589684.aspx ,已解决。谢谢。 # re: JSON实例(AJAX+STRUTS )[未登录] 回复 更多评论 2008-07-21 22:55 by 陕西BOY 哦,最近忙,没时间上blog,解决了就好。 # re: JSON实例(AJAX+STRUTS )[未登录] 回复 更多评论 2009-03-31 15:41 by dada 不知道为什么按这么操作在页面上点了连接他跳不到action里面去

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值