🤓 Filter&Listener&Ajax(三)

简介: 🤓 Filter&Listener&Ajax

4,axios


Axios 对原生的AJAX进行封装,简化书写。


Axios官网是:https://www.axios-http.cn


4.1  基本使用


axios 使用是比较简单的,分为以下两步:


  • 引入 axios 的 js 文件
<script src="js/axios-0.18.0.js"></script>


  • 使用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 对象传递请求相关的参数:


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


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


4.2  快速入门


4.2.1  后端实现


定义一个用于接收请求的servlet,代码如下:


@WebServlet("/axiosServlet")
public class AxiosServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("get...");
        //1. 接收请求参数
        String username = request.getParameter("username");
        System.out.println(username);
        //2. 响应数据
        response.getWriter().write("hello Axios~");
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("post...");
        this.doGet(request, response);
    }
}


4.2.2  前端实现


  • 引入 js 文件
<script src="js/axios-0.18.0.js"></script>


  • 发送 ajax 请求
  • get 请求


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


axios({
    method:"post",
    url:"http://localhost:8080/ajax-demo/axiosServlet",
    data:"username=zhangsan"
}).then(function (resp) {
    alert(resp.data);
})


整体页面代码如下:


 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script src="js/axios-0.18.0.js"></script>
<script>
    //1. get
   /* axios({
        method:"get",
        url:"http://localhost:8080/ajax-demo/axiosServlet?username=zhangsan"
    }).then(function (resp) {
        alert(resp.data);
    })*/
    //2. post  在js中{} 表示一个js对象,而这个js对象中有三个属性
    axios({
        method:"post",
        url:"http://localhost:8080/ajax-demo/axiosServlet",
        data:"username=zhangsan"
    }).then(function (resp) {
        alert(resp.data);
    })
</script>
</body>
</html>

4.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 请求和 post 请求。


入门案例中的 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);
})


5,JSON


5.1  概述


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


如下是 JavaScript 对象的定义格式:


{
  name:"zhangsan",
  age:23,
  city:"北京"
}

接下来我们再看看 JSON 的格式:

{
  "name":"zhangsan",
  "age":23,
  "city":"北京"
}


通过上面 js 对象格式和 json 格式进行对比,发现两个格式特别像。只不过 js 对象中的属性名可以使用引号(可以是单引号,也可以是双引号);而 json 格式中的键要求必须使用双引号括起来,这是 json 格式的规定。json 格式的数据有什么作用呢?


作用:由于其语法格式简单,层次结构鲜明,现多用于作为数据载体,在网络中进行数据传输。如下图所示就是服务端给浏览器响应的数据,这个数据比较简单,如果现需要将 JAVA 对象中封装的数据响应回给浏览器的话,应该以何种数据传输呢?




大家还记得 ajax 的概念吗? 是 异步的 JavaScript 和 xml。这里的 xml就是以前进行数据传递的方式,如下:


 

<student>
    <name>张三</name>
    <age>23</age>
    <city>北京</city>
</student>


再看 json 描述以上数据的写法:


{ 
  "name":"张三",
    "age":23,
    "city":"北京"
}


上面两种格式进行对比后就会发现 json 格式数据的简单,以及所占的字节数少等优点。


5.2  JSON 基础语法


5.2.1  定义格式


JSON 本质就是一个字符串,但是该字符串内容是有一定的格式要求的。 定义格式如下:


var 变量名 = '{"key":value,"key":value,...}';


JSON 串的键要求必须使用双引号括起来,而值根据要表示的类型确定。value 的数据类型分为如下


  • 数字(整数或浮点数)
  • 字符串(使用双引号括起来)
  • 逻辑值(true或者false)
  • 数组(在方括号中)
  • 对象(在花括号中)
  • null


示例:


var jsonStr = '{"name":"zhangsan","age":23,"addr":["北京","上海","西安"]}'


5.2.2  代码演示


创建一个页面,在该页面的 </span></code><span> 标签中定义json字符串

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    //1. 定义JSON字符串
    var jsonStr = '{"name":"zhangsan","age":23,"addr":["北京","上海","西安"]}'
    alert(jsonStr);
</script>
</body>
</html>


通过浏览器打开,页面效果如下图所示


1.png


现在我们需要获取到该 JSON 串中的 name 属性值,应该怎么处理呢?


如果它是一个 js 对象,我们就可以通过 js对象.属性名 的方式来获取数据。JS 提供了一个对象 JSON ,该对象有如下两个方法:


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


代码演示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    //1. 定义JSON字符串
    var jsonStr = '{"name":"zhangsan","age":23,"addr":["北京","上海","西安"]}'
    alert(jsonStr);
    //2. 将 JSON 字符串转为 JS 对象
    let jsObject = JSON.parse(jsonStr);
    alert(jsObject)
    alert(jsObject.name)
    //3. 将 JS 对象转换为 JSON 字符串
    let jsonStr2 = JSON.stringify(jsObject);
    alert(jsonStr2)
</script>
</body>
</html>

5.2.3  发送异步请求携带参数


后面我们使用 axios 发送请求时,如果要携带复杂的数据时都会以 JSON 格式进行传递,如下

axios({
    method:"post",
    url:"http://localhost:8080/ajax-demo/axiosServlet",
    data:"username=zhangsan"
}).then(function (resp) {
    alert(resp.data);
})

请求参数不可能由我们自己拼接字符串吧?肯定不用,可以提前定义一个 js 对象,用来封装需要提交的参数,然后使用 JSON.stringify(js对象) 转换为 JSON 串,再将该 JSON 串作为 axios 的 data 属性值进行请求参数的提交。如下:


var jsObject = {name:"张三"};
axios({
    method:"post",
    url:"http://localhost:8080/ajax-demo/axiosServlet",
    data: JSON.stringify(jsObject)
}).then(function (resp) {
    alert(resp.data);
})

而 axios 是一个很强大的工具。我们只需要将需要提交的参数封装成 js 对象,并将该 js 对象作为 axios 的 data 属性值进行,它会自动将 js 对象转换为 JSON 串进行提交。如下:


var jsObject = {name:"张三"};
axios({
    method:"post",
    url:"http://localhost:8080/ajax-demo/axiosServlet",
    data:jsObject  //这里 axios 会将该js对象转换为 json 串的
}).then(function (resp) {
    alert(resp.data);
})

注意:


  • js 提供的 JSON 对象我们只需要了解一下即可。因为 axios 会自动对 js 对象和 JSON 串进行想换转换。
  • 发送异步请求时,如果请求参数是 JSON 格式,那请求方式必须是 POST。因为 JSON 串需要放在请求体中。


5.3  JSON串和Java对象的相互转换


学习完 json 后,接下来聊聊 json 的作用。以后我们会以 json 格式的数据进行前后端交互。前端发送请求时,如果是复杂的数据就会以 json 提交给后端;而后端如果需要响应一些复杂的数据时,也需要以 json 格式将数据响应回给浏览器。


1.png


在后端我们就需要重点学习以下两部分操作:


  • 请求数据:JSON字符串转为Java对象
  • 响应数据:Java对象转为JSON字符串


接下来给大家介绍一套 API,可以实现上面两部分操作。这套 API 就是 Fastjson


5.3.1  Fastjson 概述


Fastjson 是阿里巴巴提供的一个Java语言编写的高性能功能完善的 JSON 库,是目前Java语言中最快的 JSON 库,可以实现 Java 对象和 JSON 字符串的相互转换。


5.3.2  Fastjson 使用


Fastjson 使用也是比较简单的,分为以下三步完成


  1. 导入坐标


<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.62</version>
</dependency>
  1. Java对象转JSON


String jsonStr = JSON.toJSONString(obj);

将 Java 对象转换为 JSON 串,只需要使用 Fastjson 提供的 JSON 类中的 toJSONString() 静态方法即可。


  1. JSON字符串转Java对象


User user = JSON.parseObject(jsonStr, User.class);


将 json 转换为 Java 对象,只需要使用 Fastjson 提供的 JSON 类中的 parseObject() 静态方法即可。


5.3.3  代码演示


  • 引入坐标
  • 创建一个类,专门用来测试 Java 对象和 JSON 串的相互转换,代码如下:


public class FastJsonDemo {
    public static void main(String[] args) {
        //1. 将Java对象转为JSON字符串
        User user = new User();
        user.setId(1);
        user.setUsername("zhangsan");
        user.setPassword("123");
        String jsonString = JSON.toJSONString(user);
        System.out.println(jsonString);//{"id":1,"password":"123","username":"zhangsan"}
        //2. 将JSON字符串转为Java对象
        User u = JSON.parseObject("{\"id\":1,\"password\":\"123\",\"username\":\"zhangsan\"}", User.class);
        System.out.println(u);
    }
}
目录
相关文章
|
XML JSON JavaScript
🤓 Filter&Listener&Ajax(二)
🤓 Filter&Listener&Ajax
89 0
|
JSON 前端开发 JavaScript
🤓 Filter&Listener&Ajax(四)
🤓 Filter&Listener&Ajax
88 0
🤓 Filter&Listener&Ajax(四)
|
存储 JSON 前端开发
🤓 Filter&Listener&Ajax(一)
🤓 Filter&Listener&Ajax
68 1
🤓 Filter&Listener&Ajax(一)
|
XML JSON JavaScript
《JavaWeb篇》11.Filter&Listener&Ajax看这一篇就够了(三)
《JavaWeb篇》11.Filter&Listener&Ajax看这一篇就够了(三)
《JavaWeb篇》11.Filter&Listener&Ajax看这一篇就够了(三)
|
XML 存储 前端开发
《JavaWeb篇》11.Filter&Listener&Ajax看这一篇就够了(二)
《JavaWeb篇》11.Filter&Listener&Ajax看这一篇就够了(二)
《JavaWeb篇》11.Filter&Listener&Ajax看这一篇就够了(二)
|
存储 前端开发 Java
《JavaWeb篇》11.Filter&Listener&Ajax看这一篇就够了(一)
《JavaWeb篇》11.Filter&Listener&Ajax看这一篇就够了(一)
《JavaWeb篇》11.Filter&Listener&Ajax看这一篇就够了(一)
|
6月前
|
XML 前端开发 JavaScript
什么是Ajax和jquery
什么是Ajax和jquery
47 0
|
5月前
|
JSON 前端开发 Java
利用Spring Boot处理JSON数据实战(包括jQuery,html,ajax)附源码 超详细
利用Spring Boot处理JSON数据实战(包括jQuery,html,ajax)附源码 超详细
62 0
|
5月前
|
敏捷开发 JavaScript 前端开发
❤❤❤【Vue.js最新版】sd.js基于jQuery Ajax最新原生完整版for凯哥API版本❤❤❤
❤❤❤【Vue.js最新版】sd.js基于jQuery Ajax最新原生完整版for凯哥API版本❤❤❤
|
4月前
|
前端开发 JavaScript
Jquery ajax捕获错误信息
Jquery ajax捕获错误信息
16 0