AjaxAndJson

# AJAX #(异步)

  1. ASynchronous JavaScript And XML
  2. 客户端和服务器端的同步和异步
  3. 提升用户的体验
  4. 是一种在无需加载整个页面的情况下,能够更新部分网页的技术
  5. 通过后台与服务器进行少量的数据交换,Ajax可以使网页实现异步更新,(可以在不重新加载整个页面的情况下, 对网页的某部分进行更新)

    原生js实现


    `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>

    //定义方法
    function  fun() {
        //发送异步请求
        //1.创建核心对象
        var xmlhttp;
        if (window.XMLHttpRequest)
        {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp=new XMLHttpRequest();
        }
        else
        {// code for IE6, IE5
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }

        //2. 建立连接
        /*
            参数:
                1. 请求方式:GET、POST
                    * get方式,请求参数在URL后边拼接。send方法为空参
                    * post方式,请求参数在send方法中定义
                2. 请求的URL:
                3. 同步或异步请求:true(异步)或 false(同步)

         */
        xmlhttp.open("GET","ajaxServlet01?username=tom",true);

        //3.发送请求
        xmlhttp.send();

        //4.接受并处理来自服务器的响应结果
        //获取方式 :xmlhttp.responseText
        //什么时候获取?当服务器响应成功后再获取

        //当xmlhttp对象的就绪状态改变时,触发事件onreadystatechange。
        xmlhttp.onreadystatechange=function()
        {
            //判断readyState就绪状态是否为4,判断status响应状态码是否为200
            if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                //获取服务器的响应结果
                var responseText = xmlhttp.responseText;
                alert(responseText);
            }
        }

    }

</script>


    </head>
    <body>

    <input type="button" value="发送异步请求" onclick="fun();">

    <input>
    </body>
    </html>`

jQuery实现

  1. 三种实现方式
    1. $.ajax()

    `<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
<title>Title</title>
<script  src="js/jquery-3.3.1.min.js"></script>
<script>

    //定义方法
    function fun() {
        $.ajax({
            url: "ajaxServlet01",//请求路径
            type: "post", //默认是get
            data: {
                "username": "jack", //参数列表json格式
                "age": "23"
            },
            success:function(data){
                //回调函数
                alert(data)
            }
        });

    }
    //定义方法
    function fun2() {
        $.ajax({
            url: "ajaxServlet02",//请求路径
            type: "post", //默认是get
            data: {
                "username": "tom", //参数列表json格式
                "age": "23"
            },
            success:function(data){
                //回调函数
                alert(data)
            },
            error:function(){
                //出现错误
                alter("出错了");
            },
            dataType:"json"//设置接受的响应数据的格式
        });

    }
</script>


</head>
<body>

<input type="button" value="发送异步请求" onclick="fun();">
<input type="button" value="发送异步请求2" onclick="fun2();">

<input>
</body>
</html>`
2. $.get()

    `<!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
<title>Title</title>
<script  src="js/jquery-3.3.1.min.js"></script>
<script>

    //定义方法
    /*
        * url:待载入页面的URL地址

        data:待发送 Key/value 参数。

        callback:载入成功时回调函数。

        type:返回内容格式,xml, html, script, json, text, _default。

    */
    function fun() {
        $.get("ajaxServlet02",{username:"rose",age:"12"} ,function(data){
            alert(data)
        },"text")
    }
    function fun2() {
        $.get("ajaxServlet02",{username:"tom",age:"13"} ,function(data){
            alert(data)
        },"text")
    }

</script>


</head>
<body>

<input type="button" value="发送异步请求" onclick="fun();">
<input type="button" value="发送异步请求2" onclick="fun2();">

<input>
</body>
</html>`

3. $.post()

    `<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script  src="js/jquery-3.3.1.min.js"></script>
    <script>

        //定义方法
        /*
        *   url:待载入页面的URL地址
            data:待发送 Key/value 参数。
            callback:载入成功时回调函数。
            type:返回内容格式,xml, html, script, json, text, _default。
*/
        function fun() {
            $.post("ajaxServlet02",{username:"rose",age:"12"} ,function(data){
                alert(data)
            },"text")
        }
        function fun2() {
            $.post("ajaxServlet02",{username:"tom",age:"13"} ,function(data){
                alert(data)
            },"text")
        }

    </script>


</head>
<body>

<input type="button" value="发送异步请求" onclick="fun();">
<input type="button" value="发送异步请求2" onclick="fun2();">

<input>
</body>
</html>`

## Json数据格式 ##

  1. 全称是:JavaScript Object Notation---JavaScript对象表示法
  2. Json现在多用于存储和交换信息的语法--进行数据的传输
  3. Json比XML更小,更快,更容易解析
  4. Json的语法

  5. 规则:

    1. 键值对 key 可以使用引号单双多是可以的, 也可以不用引号
    2. 数据之间用逗号分开
    3. 花括号保存对象(可以是数字,字符串(用引号引起来), 逻辑值(boolean), 数组(用花括号), Json对象,null值)
    4. 方括号用来保存数组

`    <script>
    //定义的基本格式
    var Person = {name: "zhangsan", age: "12", gender: "男"}
    alert(Person);
    //嵌套格式 数组{ }---》[ ]
    var Persons = {
        person: [
            { name: "lisi",age: "113", gender: "男"},
            { name: "lisi",age: "113", gender: "男"},
            { name: "lisi",age: "113", gender: "男"},
            { name: "lisi",age: "113", gender: "男"},
        ]
    }
    //嵌套格式:数组里面有多个对象
    var ps=[
        { name: "lisi",age: "113", gender: "男"},
        { name: "lisi",age: "113", gender: "男"},
        { name: "lisi",age: "113", gender: "男"},
        { name: "lisi",age: "113", gender: "男"}
        ]
    //alert(Persons)
</script>`

2.Json获取数据


1.Json对象.键名
2. Json对象[键名]
----------

    `//定义的基本格式
        var Person = {name: "zhangsan", age: "12", gender: "男"}
        var name = Person.name;
        var age = Person["age"];
        var gender = Person['gender'];

        alert(name+age+gender)`

 var Persons = {
            person: [
                {name: "lisi", age: "113", gender: "男"},
                {name: "lisi", age: "113", gender: "男"},
                {name: "lisi", age: "113", gender: "男"},
                {name: "lisi", age: "113", gender: "男"},
            ]
        }
        var name1 = Persons.person[1].name;
        var age1 = Persons.person[1].age;
        var gender1 = Persons.person[1].gender;
        alert(name1+age1+gender1);

## Json的遍历 ##

     //定义的基本格式
    var Person = {name: "zhangsan", age: "12", gender: "男"}
    //遍历Json的key和value
    for(var key in Person){
        //key是一个字符串, 所以不能使用Person.key
        alert(key + Person[key])
    }

` //嵌套格式:数组里面有多个对象
    var ps = [
        {name: "lisi", age: "113", gender: "男"},
        {name: "lisi", age: "113", gender: "男"},
        {name: "lisi", age: "113", gender: "男"},
        {name: "lisi", age: "113", gender: "男"}
    ]
    for (var i = 0; i < ps.length; i++) {
        var p= ps[i]
       for(var key in p){
           alert(key+p[key])
       }

    }`

Json解析器

Jsonlib Gson fastJson (Alibaba)  jackson(springmvc 中的解析器)

  1. Json数据和java对象之间转化

1. json转换java

@Test
public void test04() throws IOException {
    //将json数据转换成java对象
    //1。初始化json数据
    String json="{\"gender\":\"男\",\"name\":\"zhangsan\",\"age\":12}";
    //创建ObjectMapper对象
    ObjectMapper mapper = new ObjectMapper();
    Person person = mapper.readValue(json, Person.class);
    System.out.println(person);
}

@Test
public void test05() throws IOException {//将json字符串转换为List集合
    //1。初始化json数据
    ArrayList<Person> list = new ArrayList<>();
    list.add(new Person("zhangsan", 1212, "nan", new Date()));
    list.add(new Person("zhangsan", 1212, "nan", new Date()));
    list.add(new Person("zhangsan", 1212, "nan", new Date()));
    ObjectMapper mapper = new ObjectMapper();
    String s = mapper.writeValueAsString(list);
    //创建ObjectMapper对象
    ArrayList<String> arrayList = mapper.readValue(s, ArrayList.class);
    System.out.println(arrayList);
}

  @Test
public void test07() throws IOException {
    //json字符串转换成HashMap集合
    Map<String, Object> map = new HashMap<>();
    map.put("name","zhangsan");
    map.put("age",12);
    map.put("gender","男");
    ObjectMapper mapper = new ObjectMapper();
    String s = mapper.writeValueAsString(map);
    //{"gender":"男","name":"zhangsan","age":12}
    HashMap hashMap = mapper.readValue(s, HashMap.class);
    Set set = hashMap.entrySet();
    set.stream().forEach(name-> System.out.println(name));
}

2. java转换成json
    1. 导入jar包jackson
    2. 创建jackson对象ObjectMapper
    3. 使用方法转换成Json字符串

# java转换Json字符串 #

    ` @Test
public void test1() throws IOException { //java对象转化成json字符串
    Person person = new Person("zhangsan", 1212, "nan");
    //创建Jackson的核心对象
    ObjectMapper mapper = new ObjectMapper();
    /*
    * mapper.writeValue()
    * 参数:
    * File:将对象转换为json字符串, 并保存到指定的文件中
    * Writer:将对象转换为json字符串,并将json数据填充到字符输出流中
    * OutputStream:将对象转换为json对象, 并将json数据填充到字节输出流中
    *
    * */
    String json = mapper.writeValueAsString(person);
    System.out.println(json);//{"name":"zhangsan","age":1212,"gender":"nan"}
    mapper.writeValue(new File("a.txt"),person);


}`

注解

1. 排除属性的 @JsonIgnore:排除属性(忽略该属性 ,在属性或者getset方法中 使用该注解)
2. @JsonFormat:格式化注解:(使用注解格式化, 用在属性或者)
    @JsonFormat(pattern="yyyy-MM-DD")
    @JsonIgnore
    private Date birthday;**
3.list或者map类型转换成Json

@Test
public void test02() throws JsonProcessingException {
    ArrayList<Person> list = new ArrayList<>();
    list.add(new Person("zhangsan", 1212, "nan", new Date()));
    list.add(new Person("zhangsan", 1212, "nan", new Date()));
    list.add(new Person("zhangsan", 1212, "nan", new Date()));
    ObjectMapper mapper = new ObjectMapper();
    String s = mapper.writeValueAsString(list);
    //[{"name":"zhangsan","age":1212,"gender":"nan"},{"name":"zhangsan","age":1212,"gender":"nan"},{"name":"zhangsan","age":1212,"gender":"nan"}]

System.out.println(s);

}
@Test
public void test03() throws JsonProcessingException {
    Map<String, Object> map = new HashMap<>();
    map.put("name","zhangsan");
    map.put("age",12);
    map.put("gender","男");
    ObjectMapper mapper = new ObjectMapper();
    String s = mapper.writeValueAsString(map);
    //{"gender":"男","name":"zhangsan","age":12}
    System.out.println(s);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值