Ajax & JSON

作者: 醒醒Coco | 来源:发表于2018-08-10 01:47 被阅读0次

    Ajax

    概念

    1. 什么是Ajax?
      Asynchronous JavaScript and XML , 异步的JSXML.异步的客户端和服务器交互技术
      Ajaxjs提供的,代码是js代码,需要写在Script标签体里
      Ajax在客户端和服务器进行交互的时候,数据默认是使用XML格式传输的--已经被json取代了

    2. 作用

      • 局部刷新
      • 异步加载
    3. 异步与同步的概念
      同步: 客户端发起请求,然后客户端处于服务器的等待状态,这个状态下,客户端不能进行其他操作.类似于"假死"状态.
      异步: 客户端发起请求, 然后客户端可以自由进行其他操作,不会处于“假死”状态;一旦服务器响应完成,可以继续后续操作

    JS 的 Ajax

    步骤
    • 创建一个Ajax引擎对象
    • 给Ajax引擎对象绑定事件,监听Ajax引擎的状态变化.一旦监听到接受服务器响应完成,要执行响应行为
    • 设置请求的参数数据
    • 发送请求
    js 的 get方法-异步
    function ajaxGet() {
            //创建一个Ajax引擎对象
            var xmlHttp = new XMLHttpRequest();
            //2.给Ajav引擎对象绑定事件,监听Ajax的引擎状态变化,一旦监听到接收服务器响应完成,要执行响应行为
            xmlHttp.onreadystatechange = function (ev) {
                if (xmlHttp.readyState == 4) {
                    if (xmlHttp.status == 200) {
                        document.getElementById("tip").innerText = xmlHttp.responseText;
                    }
                }
            }
            //3.这是请求的参数数据,open()方法:请求方式,请求地址,是否异步(默认true,异步)
            //get方法传参
            xmlHttp.open("get", "/ajax/ajaxServlet?username=tom", true);
            //4. 发送请求
            xmlHttp.send();  
    
    js的post方法-异步
        function ajaxPost() {
            //1. 创建一个Ajax引擎对象
            var xmlhttp = new XMLHttpRequest();
            // 2. 给Ajax引擎对象绑定事件,监听Ajax引擎的状态变化.一旦监听到接受服务器响应完成,要执行响应行为
            xmlhttp.onreadystatechange = function (ev) {
                if (xmlhttp.readyState == 4) {
                    if (xmlhttp.status == 200) {
                        document.getElementById("tip").innerHTML = xmlhttp.responseText;
                    }
                }
            }
            // 3. 设置请求的参数数据:请求方式,请求地址,是否异步(//不写true,默认是异步的)
            xmlhttp.open("post", "ajaxServlet", true);
            // 4. 发送请求
            xmlhttp.setRequestHeader("Content-type","application/x-www/form-urlencode")
            xmlhttp.send("username=tom");
        }
    
    js的post和get方法-同步模式

    只需要将 xmlhttp.open(method,url,async)中的aync参数该为false即可

    请求参数的格式
    • 格式一:"username=tom&password=123"
    • 格式二:{username:"tom",password:"123"}
    关于路径
    • HTML里写路径的时候,建议使用相对路径.好处是不需要关注context path.
    • jsp或者Servlet里面,写绝对路径 ./资源路径 或者 /contextpath/资源路径
    • 当前页面的资源路径:/jsajax.html
      请求的目标资源路径:/ajaxServlet
      在当前页面里请求/ajaxServlet,路径就可以写成:./ajaxServlet,简写成:ajaxServlet

    jQuery 的 Ajax

    原生的 JavaScript 提供的 Ajax,重复代码比较多,而且存在浏览器兼容问题。jQuery 对 js 的 Ajax 做了二次封 装,封装后提供了一些方法。这些方法一样可以实现 Ajax 的效果,但是比原生 js 的 Ajax 更为简单,并且解决了浏览器兼 容性问题.

    Post方法 (最常用)
    语法: jQuery.post(url,[params],[callback],[responseType])
    参数: url 请求的地址,必须
         params 请求的参数
            格式1: username=tom&password=123
            格式2:  {username:"tom",password:"123"}
         callback 当Jquery监听到服务端响应完成之后,调用的函数对象
            function(result){
                //result:服务器响应回来的数据
            }
        responseType 服务端响应回来的数据类型。text/json
    
    //var params = "username=tom";
            var params = {username:"tom"};
            $.post("ajaxServlet", params, function (result) {
                alert(result);
            })
    
    Get方法
    语法: jQuery.get(url,[params],[callback],[responseType])
    参数: url 请求的地址,必须
         params 请求的参数
            格式1: username=tom&password=123
            格式2:  {username:"tom",password:"123"}
         callback 当Jquery监听到服务端响应完成之后,调用的函数对象
            function(result){
                //result:服务器响应回来的数据
            }
        responseType 服务端响应回来的数据类型。text/json
    
     var params = {username:"tom"}
            $.get("/ajax/ajaxServlet",params,function (result) {
                alert(result);
            })
    

    注意: get/post方法,只能发异步的. 如果要发送同步的请求,需要使用ajax方法

    Ajax方法
    语法:$.ajax({settings});
    参数:是以{}的对象形式,里边是键值对的方式配置相关的数据。有非常多的配置项,常用的有:
          url:请求的地址。必须
          data:请求参数。格式一:"username=tom&password=123"。 格式:{username:"tom",password:"123"}
          type:请求方式。get/post
          dataType:服务端响应回来的数据类型。text/json
          success:jQuery 监听到服务端响应完成后,调用的函数对象。
             function(result){
                 //result:服务端响应回来的数据
             }
          async:是否异步。true/false
    
    $.ajax({
        url: "/ajax/ajaxServlet",  // 请求地址,必填
        data: "username=tom", //请求参数
        type: "post", //请求方式
        dataType: "text", //服务器返回的参数类型
        success: function (result) { //监听到服务器响应完成后,调用函数对象
            alert(result);
        },
        async: true  //是否异步,默认true
    });
    
    jQuery3.0 的Ajax新增签名方式

    待补充...下回分解....

    JSON

    概念

    JavaS Object Notation JS对象标记法. 是一种轻量级数据格式,代替xml

    定义和解析JSON

    • 定义:
      • 对象形式定义:var json = {"key":value, "key":value}
      • 数组形式定义:var arr = [obj1, obj2];
      • 两种混合定义:var arr = {"key":obj, "key":{}, "key":[]}
    • 解析: var v = json.key; var v = json[i].key
    • Demo
      • var json = {key:value,key:value}
      /*class Person{
         String name = "三丰";    
         Integer age = 100; 
      }*/
      var p = {"name":"三丰","age":100};
      var name = p.name;
      var age = p.age;
      
      • var arr = [object1,object2]
        //[{key:value,key:value},{key:value,key:value}]
        var json = [
            {"name":"张三","age":17},
            {"name":"李四","age":18}
        ];
        var name1 = json[0].name;
        var name2 = json[1].name;
        var age1 = json[0].age;
        var age2 = json[1].age;
        
      • var arr = {"key":"obj","key":{},"key":[]}
        //1. {"param":[{key:value,key:value},{key:value,key:value}]
        var json = {
            "department" :[
                {"name":"coco","age":17},
                {"name":"joy","age":18},
                {"name":"ceci","age":19}
            ]
        };
        var name = json.department[2].name;
        
        /**
         * 2. 
         * {
         *   "param1":[{key:value,key:value},{key:value,key:value}],
         *   "param2":[{key:value,key:value},{key:value,key:value}],
         *   "param3":[{key:value,key:value},{key:value,key:value}]
         * }
         */
        var json = {
            "department1": [
                {"name": "coco", "age": 17},
                {"name": "joy", "age": 18},
                {"name": "ceci", "age": 19}
            ],
            "department2": [
                {"name": "coco", "age": 17},
                {"name": "joy", "age": 18},
                {"name": "ceci", "age": 19}
            ]
        }
        var age = json.department2[1].age;
        alert(age);
        
        /**
         * 3
         * {
         *   "param1":"value1",
         *   "param2":{},
         *   "param3":[{key:value,key:value},{key:value,key:value}]
         * }
         */
        
        var json = {
            "school": "University",
            "info": {"schoolName": "ShenZhen-University", "address": "ShenZhen"},
            "student": [
                {"name": "coco", "age": 17},
                {"name": "joy", "age": 18},
                {"name": "ceci", "age": 19}
            ]
        }
        var schoolName = json.info.schoolName;
        var name = json.student[0].name;
        alert(schoolName);
        alert(name);
        

    JSON转换工具

    服务端经常要把 JavaBean 或者是 JavaBean 的集合转换成 json,返回响应给客户端,可以使用工具包来完成 这个转换的工作。

    常见的有:

    • jsonlib:sun 公司的,依赖的 jar 包过多
    • gson:google 的工具包
    • fastjson:alibaba 的工具包
    • jackson:springMvc 默认使用的转换工具包
    jsonlib
    package json;
    
    import domain.User;
    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
    
    public class JsonLib_01 {
        public static void main(String[] args) {
            User user1 = new User("coco","123");
            User user2 = new User("xingxing","123");
    
            ArrayList<User> userList = new ArrayList();
    
            userList.add(user1);
            userList.add(user2);
    
            Map<String,User> map = new HashMap<>();
            map.put("user1",user1);
            map.put("user2",user2);
            
            //把user1转换为json格式
            JSONObject jsonObject = JSONObject.fromObject(user1);
            String json = jsonObject.toString();
            System.out.println(json);
    
            //把list转换为json格式
            JSONArray jsonArray = JSONArray.fromObject(userList);
            json = jsonArray.toString();
            System.out.println(json);
    
            //把map转换为json格式
            JSONObject jsonObject1 = JSONObject.fromObject(map);
            json = jsonObject1.toString();
            System.out.println(json);
        }
    }
    
    
    gson
    package json;
    
    import com.google.gson.Gson;
    import domain.User;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
    
    public class Gson_02 {
        public static void main(String[] args) {
            User user1 = new User("coco", "123");
            User user2 = new User("xingxing", "123");
    
            ArrayList<User> userList = new ArrayList();
            userList.add(user1);
            userList.add(user2);
    
            Map<String, User> map = new HashMap<>();
            map.put("user1", user1);
            map.put("user2", user2);
    
            //把user转换为Json格式
            Gson gson = new Gson();
            String json = gson.toJson(user1);
            System.out.println(json);
    
            //把userList转换为Json格式
            json = gson.toJson(userList);
            System.out.println(json);
    
            //把map转换为Json格式
            json = gson.toJson(map);
            System.out.println(json);
        }
    }
    
    
    fastjson
    package json;
    
    import com.alibaba.fastjson.JSONObject;
    import domain.User;
    
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
    
    public class FastJson_03 {
        public static void main(String[] args) {
            User user1 = new User("coco", "123");
            User user2 = new User("xingxing", "123");
    
            ArrayList<User> userList = new ArrayList();
    
            userList.add(user1);
            userList.add(user2);
    
            Map<String, User> map = new HashMap<>();
            map.put("user1", user1);
            map.put("user2", user2);
    
            //把user转换为Json格式
            String json = JSONObject.toJSONString(user1);
            System.out.println(json);
    
            //把userList转换为Json格式
            json = JSONObject.toJSONString(userList);
            System.out.println(json);
    
            //把map转换为Json格式
            json = JSONObject.toJSONString(map);
            System.out.println(json);
        }
    }
    
    jackson
    package json;
    
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import domain.User;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
    
    public class Jackson {
        public static void main(String[] args) throws JsonProcessingException {
    
            User user1 = new User("coco", "123");
            User user2 = new User("xingxing", "123");
    
            ArrayList<User> userList = new ArrayList();
    
            userList.add(user1);
            userList.add(user2);
    
            Map<String, User> map = new HashMap<>();
            map.put("user1", user1);
            map.put("user2", user2);
    
            ObjectMapper mapper = new ObjectMapper();
            
            //把user转换为Json格式
            String json = mapper.writeValueAsString(user1);
            System.out.println(json);
            
            //把userList转换为Json格式
            json = mapper.writeValueAsString(userList);
            System.out.println(json);
            
            //把map转换为Json格式
            json = mapper.writeValueAsString(userList);
            System.out.println(json);
        }
    }
    
    

    相关文章

      网友评论

        本文标题:Ajax & JSON

        本文链接:https://www.haomeiwen.com/subject/kavhbftx.html