ajax(2)

1.json 本质:字符串,具有特定的描述规格 json串的描述规格: *java:new User(1,"c35",true); new User(2,"c36",false) json:{"id":1,"name":"c35","gender":true} -- {"id":2,"name":"c36","gender":false} *java:String[]{"c35","c37"}; Object[]{123,true,"c35"} json:["c35","c37"] -- [123,"c35"] *java:Map-->【name:"c35",age:18,gender:true】 json:{"name":"c35","age":18,"gender":true} *java:List<object>【123,Map【name:"c35",gender:true】 】 json:[123,{"name":"c35","gender":true}] class User{ id name gender } ====================================================================================== 2.ajax中json的使用思路: 目的:在服务器和客户端之间有更大的数据量的通信 1.在服务器端将java对象转换成json: gson.jar:java-->json //通过gson.jar的支持将java对象user转换成json GsonBuilder gsonB=new GsonBuilder(); Gson gson=gsonB.create(); //利用gson将java-->json String jsonStr=gson.toJson(user); 2.在客户端解析json,从中获取数据 jquery:$.parseJson(json); var a='[{"id":1,"age":18},123]'; var aObj=$.parseJSON(a);//[{"id":1,123] aObj[0].id; aObj[0].name; aObj[2]; 数据通信载体: json:轻便 可读性较差 xml:重 可读性好 <user> <id name="xxx">35</id> <name>c35</name> <gender>true</gender> </user> ====================================================================================== 3.ajax流程简化 $.ajax({ type:"post",url:"${pageContext.request.contextpath}/cascade35",data:"sheng="+$("#s>option:selected").val(),success:function(ret35){//服务器的响应值 //清空 $("#city").empty(); for(var i=0;i<ret35.length;i++){ $("#city").append("<option>"+ret35[i]+"</option>"); } },dataType:"json"//指明返回为json,则ajax方法自动解析响应值 }); $.get("${pageContext.request.contextpath}/cascade35",{sheng:$("#s>option:selected").val()},function(ret35){//ret35:响应值 //清空 $("#city").empty(); for(var i=0;i<ret35.length;i++){ $("#city").append("<option>"+ret35[i]+"</option>"); } },"json" ); $.post("${pageContext.request.contextpath}/cascade35",function(ret35){//ret35:响应值 //清空 $("#city").empty(); for(var i=0;i<ret35.length;i++){ $("#city").append("<option>"+ret35[i]+"</option>"); } },"json" ); ===================================================================================== 4.ajax跨域 协议:主机:端口 域的唯一标示 http://127.0.0.1:8989 project1 发起ajax请求,请求project2 http://127.0.0.1:9090 project2 http://192.168.1.123:9090 情景: http://localhost:8989 ajax1 发起ajax请求 请求ajax2 http://localhost:9999 ajax2 需要在ajax2中为ajax1添加访问权限: //为ajax1增设访问权限 res.addHeader("Access-Control-Allow-Origin","http://localhost:8989"); ===================================================================================== 5.json回环问题解决:在将java对象转换json时,出现的死循环现象 class User{ int id; String name; Address address; } class Address{ int id; String city; User user; } User user=new User(1,"c35"); Address addr=new Address(1,"bj"); user.setAddress(addr); addr.setUser(user); Gson gson; gson.toJson(user);==>{"id":1,"address":{"id":1,"city":"bj","user":{}}} gson.toJson(addr);==>{"id":1,"user":{"id":1,"address":{}}} *5.1 解决方案一:排除策略: GsonBuilder gsonB=new GsonBuilder().setExclusionStrategies(new ExclusionStrategy(){ //指定要排除的属性 public boolean shouldSkipField(FieldAttributes field) { //获取当前要序列化到json串中的属性名 String name=field.getName(); if("user".equals(name)){ return true;//排除此属性 } return false; } public boolean shouldSkipClass(Class<?> arg0) { // Todo Auto-generated method stub return false; } }); Gson gson=gsonB.create(); *5.2 解决方案二:expose策略,指定哪些属性参加json的生成 *在参加json生成属性前,添加Expose注解: public class Address { @Expose private Integer id; @Expose private String city; ... *创建Gson对象: GsonBuilder gsonB=new GsonBuilder().excludeFieldsWithoutExposeAnnotation(); Gson gson=gsonB.create(); =====================================================================================

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...