Ajax和JSON

98 阅读5分钟

一、Ajax

1.概述

AJAX (Asynchronous JavaScript And XML):异步的 JavaScript 和 XML。

1. Ajax作用

1. 与服务器进行数据交换:通过AJAX可以给服务器发送请求,服务器将数据直接响应回给浏览器。
2. 异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想、用户名是否可用校验,等等…

2. 同步和异步

  1. 同步
浏览器页面在发送请求给服务器,在服务器处理请求的过程中,浏览器页面不能做其他的操作。只能等到服务器响应结束后才能,浏览器页面才能继续做其他的操作。
  1. 异步
浏览器页面发送请求给服务器,在服务器处理请求的过程中,浏览器页面还可以做其他的操作。

2.快速入门

1. 服务端实现

//1. 响应数据
response.getWriter().write("hello ajax~");

2. 客户端实现

在 < script > 标签中书写ajax代码

1.创建核心对象,不同的浏览器创建的对象是不同的
    var xhttp;
    if (window.XMLHttpRequest) {
        xhttp = new XMLHttpRequest();
    } else {
        // code for IE6, IE5
        xhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

2.发送请求

    //建立连接
    xhttp.open("GET", "http://localhost:8080/ajax-demo/ajaxServlet");
    //发送请求
    xhttp.send();
    
3.获取响应
    xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            // 通过 this.responseText 可以获取到服务端响应的数据
            alert(this.responseText);
        }
    };

3.axios

Axios 对原生的AJAX进行封装,简化书写。 Axios官网是: www.axios-http.cn

1. 基本使用

1.引入 axios 的 js 文件
    <script src="js/axios-0.18.0.js"></script>
2.使用axios 发送请求,并获取响应结果
    - 发送 get 请求
        axios({
            method:"get",
            url:"http://localhost:8080/ajax-demo1/aJAXDemo1?username=zhangsan"
        }).then(function (resp){
            alert(resp.data);
        })
    - 发送 post 请求
        axios({
            method:"post",
            url:"http://localhost:8080/ajax-demo1/aJAXDemo1",
            data:"username=zhangsan"
        }).then(function (resp){
            alert(resp.data);
        });

axios() 是用来发送异步请求的,小括号中使用 js 对象传递请求相关的参数:

1. method 属性:用来设置请求方式的。取值为 get 或者 post 。
2. url 属性:用来书写请求的资源路径。如果是 get 请求,需要将请求参数拼接到路径的后面,
     格式为: url?参数名=参数值&参数名2=参数值23. data 属性:作为请求体被发送的数据。也就是说如果是 post 请求的话,数据需要作为 data 属性的值。

then() 需要传递一个匿名函数。

then() 中传递的匿名函数称为 回调函数,意思是该匿名函数在发送请求时不会被调用,是在成功响应后调用的函数。
该回调函数中的 resp 参数是对响应的数据进行封装的对象,通过 resp.data 可以获取到响应的数据。

2. 快速入门(后端实现和前端实现)

1.后端实现

1. 接收请求参数
    String username = request.getParameter("username");
    System.out.println(username);
2. 响应数据
    response.getWriter().write("hello Axios~");

2.前端实现

1.引入 js 文件
    <script src="js/axios-0.18.0.js"></script>
2.发送 ajax 请求
    - get 请求
        axios({
            method:"get",
            url:"http://localhost:8080/ajax-demo/axiosServlet?username=zhangsan"
        }).then(function (resp) {
            alert(resp.data);
        })
    - Post请求
        //post请求, 在js中{} 表示一个js对象,而这个js对象中有三个属性
        axios({
            method:"post",
            url:"http://localhost:8080/ajax-demo/axiosServlet",
            data:"username=zhangsan"
        }).then(function (resp) {
            alert(resp.data);
        })

3. 请求方法别名

Axios为所有支持的请求方法提供了别名。如下:

get 请求 : axios.get(url[,config])
delete 请求 : axios.delete(url[,config])
head 请求 : axios.head(url[,config])
options 请求 : axios.option(url[,config])
post 请求: axios.post(url[,data[,config])
put 请求: axios.put(url[,data[,config])
patch 请求: axios.patch(url[,data[,config])

举例:

    - get请求
        axios.get("http://localhost:8080/ajax-demo/axiosServlet?username=zhangsan")
        .then(function(resp) {
            alert(resp.data);
        });
        
    - Post请求
        axios.post("http://localhost:8080/ajax-demo/axiosServlet","username=zhangsan")
        .then(function(resp) {
            alert(resp.data);
        })

二、JSON

1. JSON概述

概念: JavaScript Object Notation 。JavaScript 对象表示法.

1. JavaScript对象定义格式:
    {
        name:"zhangsan",
        age:23,
        city:"北京"
    }
    
2. JSON 定义格式:
    {
        "name":"zhangsan",
        "age":23,
        "city":"北京"
    }

总结:
    1.json 格式中的键要求必须使用双引号括起来
    2.js 对象中的属性名可以使用引号(可以是单引号,也可以是双引号)
    3.JSON用于作为数据载体,在网络中进行数据传输。
        JSON优点:
            1.结构层次鲜明
            2.语法格式简单

2. JSON 基础语法

1. 定义格式

JSON 本质是字符串,定义格式如下:

var 变量名 = '{"key":value,"key":value,...}';
JSON 串的键要求必须使用双引号括起来,而值根据要表示的类型确定。

value 的数据类型分为如下:

    1.数字(整数或浮点数)
    2.字符串(使用双引号括起来)
    3.逻辑值(true或者false4.数组(在方括号中)
    5.对象(在花括号中)
    6.null

2. JS中的一些方法

1. js对象.属性名 的方式来获取数据。

2. JS 提供了一个对象 JSON ,该对象有如下两个方法:

    - parse(str) :将 JSON串转换为 js 对象。
        使用方式是: var jsObject = JSON.parse(jsonStr);

    - stringify(obj) :将 js 对象转换为 JSON 串。
        使用方式是: var jsonStr = JSON.stringify(jsObject)

注意:
1. js 提供的 JSON 对象我们只需要了解一下即可。
    因为 axios 会自动对 js 对象和 JSON 串进行想换转换。

2. 发送异步请求时,如果请求参数是 JSON 格式,那请求方式必须是 POST 。
    因为 JSON 串需要放在请求体中。

3. JSON串和Java对象的相互转换

1. Fastjson 概述

Fastjson 是阿里巴巴提供的一个Java语言编写的高性能功能完善的 JSON 库。

可以实现 Java 对象和 JSON 字符串的相互转换。

2. Fastjson 使用

1. 导入坐标
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.62</version>
    </dependency>

2. Java对象转JSON
    String jsonStr = JSON.toJSONString(obj);

3.JSON字符串转Java对象
    User user = JSON.parseObject(jsonStr, User.class);

4. 后端获取数据方式

- 如果提交的数据格式是 username=zhangsan&age=23 ,后端就可以使用 request.getParameter() 方法获取
    String brandName = request.getParameter("brandName");

- 如果提交的数据格式是 json,后端就需要通过 request 对象获取输入流,再通过输入流读取数据
    // 获取请求体数据
    BufferedReader br = request.getReader();
    String params = br.readLine();
    // 将JSON字符串转为Java对象
    Brand brand = JSON.parseObject(params, Brand.class);