您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 数据通信与网络 > 基于jquery-ajax的json
首先说下,这个问题弄了我两天,再次抱怨下中国网络上面找点技术真不容易,太杂,太乱。只能自己再总结总结。在这儿我也会把源代码分享给大家多话不说直接说案例:在说json之前我先说下,如果前台需要传一个或者两个参数到后台去,然后后台又返回一个到两个等不多的参数到前台来,当两边参数不多的情况下,我建议不要用json,那样返而繁琐了,直接用jqueryajax或者ajax直接在url后台跟参数,后台接收就行,然后返回的时候就返回一个串,只不这该串用了自己的处理方法,通常就是拼接例如:周杰伦@林俊杰@....;传到前台直接用js来spilt下就行。我下面说的两个案例分别是前后台都需要json来互相传值,因为参数比较多,有20多个,并且有的参数还是一个数组案例1:JQuery+ajax+json点击第一个按扭把JSON传到后台从后台取到JSON,并拿到user.name值tomJSP页面:我只写js内容functionlogin(){varurl=login.action;varparams=[{logName:peiliang,password:1ab,age:22}];$.ajax({type:post,url:url,dataType:'json',data:{'params':JSON.stringify(params)},success:function(data,textStatus){alert(data);//vard=[{age:22,logName:tom,password:1ab}];varuser=eval(data);$(#result).each(function(){alert('name');$(this).html('welcome,'+user.logName);});},error:function(xhr,status,errMsg){alert(操作失败!);}});}解释1:params:这个参数是需要自己拼接的,拼接也是有规律的,我在下面就找了网上的一段话介绍下:说白了可以理解为model里面有属性,属性也可以是一个model,然后model里面又可以有属性;也就是1维数组,2维数组的概念。一、JSON的一些基础知识。JSON中对象通过“{}”来标识,一个“{}”代表一个对象,如{“AreaId”:”123”},对象的值是键值对的形式(key:value)。“[]”,标识数组,数组内部各个数据之间通过“,”分割,如[“AreaId”:”123”,”AreaId”:”345”]。很多情况下是对象数组,那就是这样:代码如下复制代码[{“AreaId”:”123”},{“AreaId”:”345”}]其实数组也是一个对象,上面的格式也可以写成这样:代码如下复制代码{“Area”:[{“AreaId”:”123”},{“AreaId”:”345”}]}这表示一个Area对象,他有两个子数据,每个子数据也是一个对象,每个子对象都是AreaId。JSON中字符串和字符的定义格式和一般的类C语言定义是类似的,双引号定义字符串,单引号定义字符。JSON的键(Key)用双引号括起来,比如上面的“Area“和”AreaId“,都是用双引号括起来的,在一些语言中构造JSON字符串的时候,可以使用转义字符转义双引号。解释2:这个地方用到了JSON.stringify(params),就是把我们拼接的串转化成JSON对象,这个时候需要引入json2.js文件。scripttype=text/javascriptsrc=js/json2.js/script解释3:eval(data)因为前后台交换只能通过串来,所以这个地方的data就是后台传过来json的串,在这儿我们把它转化成JSON对象,方便取里面的值,下面的user就是我后台的model名Struts2.xml配置不多说actionname=loginclass=com.ajax.json.action.UserActionmethod=login/actionAction代码:都有解释也不多说publicStringlogin()throwsIOException{StringjsonArrayString=ServletActionContext.getRequest().getParameter(params);System.out.println(parames:+jsonArrayString);//把串转化成json对象JSONArrayjsonArray2=JSONArray.fromObject(jsonArrayString);//将josn数组转换成对应类的泛型集合ListUseruserList=JSONArray.toList(jsonArray2,User.class);System.out.println(userList.size());//多个对象的时候,直接取到某个对象,最外层的//ListMapString,Stringmaps=json.getJSONArray(pei);//MapString,Stringmap=maps.get(0);//System.out.println(map.get(logName));for(Useru:userList){System.out.println(用户名:+u.getLogName());u.setLogName(tom);//把model转化成json串result=JSONObject.fromObject(u).toString();System.out.println(result);}ServletActionContext.getResponse().getWriter().write(result);returnnull;}案例2:Jquery.getJSON点击按扭2,通过JQuery.getJSON往后台送一个JSON串从后台拿到JSON,然后取到相应的user.name值lucy前台js需要注意是架包的问题:我这里面用了这引起架包,其中第一个好像没有用Jsp页面信息functionlogin2(){varurl=login2.action;varparams={user.logName:peiliang,user.password:1ab,user.age:22};alert(params);$.getJSON(url,params,functioncallback(data){//converttojsonobjectalert(data);varuser=eval((+data+));//$(#result).each(function(){alert('name');$(this).html('welcome,'+user.logName);});});}这上面不需要怎么解释,就是JSON串不需要转化JSON对象Struts.xml配置这里用到的就是struts的json,所以下面有讲需要添加struts-json-plugin.jarAction代码代码也很好看懂,不多解释,需要注意的就是result要添加getset方法具体在我使用jquery.getJSON的时候需要添加一些另外的架包,因为struts2中如果返回json对象的时候如下图,会报如下错误java.lang.NoClassDefFoundError:com/opensymphony/xwork2/util/TextUtils解决的办法就是要加两个架包2.1.8搭配的jar可以在下载的structs-2.1.8\lib文件夹下找到,分别是structs-json-plugin-2.1.8.jar、structs2-junit-plugin-2.1.8.jar和json-lib-2.1.jar三个包。在我加完了架包之后又报这个错Unabletoloadconfiguration.-package-jar:file:/D:/webstudy/tomcat-6.0/webapps/struts2json/WEB-INF/lib/struts2-json-plugin-2.1.8.jar!/struts-plugin.xml:8:59解决办法如下:struts2-json-plugin-2.1.8.1.jar中已经存在名为json-default的包名。而jsonplugin中的struts-plugin.xml中的名字也叫json-default两者冲突,所以出错了。。struts2.1.8我没用过,你看一下这个struts2-json-plugin-2.1.8.1.jar是不是就是struts2的json插件包,如果是这样的话,你就可以把jsonplugin-0.34.jar去掉了源代码在CSDN上面有,不好意思收个积分,因为我CSDN确实没有分,平时下个东西,蛋疼得紧。CSDN地址:多的我也就不说了,代码中有,代码我只是测试的东西,没有完善,只有会用就行,具体要细究,大家可以花点时间,我这里有几个网址可以参考下,我觉得对我有点用的://imwujianhao.blog.163.com/blog/static/163776830201066115125616/://blog.sina.com.cn/s/blog_85b859c90100uo7n.htmljava对象转化成json对象实战2://这里面有一些比较不错的文章
本文标题:基于jquery-ajax的json
链接地址:https://www.777doc.com/doc-2570226 .html