微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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(); =====================================================================================

原文地址:https://www.jb51.cc/ajax/162918.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐