> 文档中心 > 异步刷新ajax、jQuery、axios简单使用

异步刷新ajax、jQuery、axios简单使用


异步刷新ajax、jQuery、axios简单使用

认识

这里我们简单了解下,什么是ajax;

在这里插入图片描述

ajax,异步刷新技术,这里可能有小伙伴不了解,我们先来看看没有ajax的情况:

如果没有ajax,你在网站的时候得频繁的点击刷新键,你点一个东西,大多数情况跳到新的连接,做一次刷新,在不刷新页面的时候就好像个静态网页;

如果一个页面没有ajax,我们在使用的过程中,因为想要与后端数据选择交互,怎么样才可以提交表单,刷新页面,点击超链接,但是有时候页面都是一个大的刷新,甚至重新加载整个页面,不说效率,如果渲染过多,流量也是很麻烦的,前后端都麻烦,所以ajax就值得了,太值得了;

这里我们简单了解下使用

原生js

我们先来看看不使用框架的原生js,是如何做出异步请求的:

环境准备

先写了一个后端接口HelloServlet

protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String name = request.getParameter("name");System.out.println(name);if (name != null && !name.equals("")) {response.getWriter().print("hello , " + name);} else {response.getWriter().print("hello");}}

写了一个test.jsp页面:

Insert title here链接传递function fun() {// 1. 创建 XHR 对象var xhr;if (window.XMLHttpRequest) {xhr = new XMLHttpRequest();} else {// code for IE6, IE5xhr = new ActiveXObject("Microsoft.XMLHTTP");}// 2. 调用 open 函数,指定 请求方式 与 URL地址,并设置请求头/* open(method, url, async)规定请求的类型method:请求的类型:GET 还是 POSTurl:服务器(文件)位置async:true(异步)或 false(同步), 默认false*/xhr.open('POST', '${pageContext.request.contextPath}/HelloServlet');//发送合适的请求头信息,这里一定要设置,我没有设置,发送不了post请求xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");// 3. 调用 send 函数,发起 Ajax 请求xhr.send("name=xuexiriji");// 4. 监听 onreadystatechange 事件//readyState每次改变就会执行onreadystatechange//请求结束后xhr.onloadxhr.onreadystatechange = function() {// 4.1 监听 xhr 对象的请求状态 readyState ;与服务器响应的状态 statusif (xhr.readyState === 4 && xhr.status === 200) {// 4.2 打印服务器响应回来的数据console.log(xhr.responseText);}}}

首先是我们试试链接传递,我们发现点击链接之后,由于连接的特性,会跳转到新的页面,刷新整个页面,而且数据也拿不到:

在这里插入图片描述

那我们通过ajax呢,我们发现页面并没有跳转,同时数据也会传送过来,我们也可以通过js拿到数据,然后在进行渲染,这就是异步技术的好处,以及为什么有这个技术:

在这里插入图片描述

上面代码中已经注释的很清楚了,拿来就可以使用:

readyState有5种状态:

状态值 状态描述
0 AJAX开始初始化
1 开始发送AJAX请求
2 AJAX请求发送完成
3 开始解析响应的资源
4 AJAX请求的步骤全部完成

jquery

那ajax这么好用的技术,框架怎么会不做封装呢,我们来看下jquery对ajax的使用,环境还是哪个环境,我们换成jquery的ajax

//百度的CDN镜像function funj(){$.ajax({    url:"${pageContext.request.contextPath}/HelloServlet",    type: 'Post',    data:{    'name':"xuexiriji",    },    async:true,  //异步刷新,默认是true    success:function(res){    //响应成功之后的回调函数 console.log(res);    },    error:function(res){    //失败之后的回调函数    }    });}

结果

在这里插入图片描述

这里里面刚才有一个问题,我查了半天,终于知道了

可以去参考这篇博客:https://segmentfault.com/a/1190000015778842

在这里插入图片描述

// 1 默认的格式请求体中的数据会以json字符串的形式发送到后端  'Content-Type: application/json '// 2 请求体中的数据会以普通表单形式(键值对)发送到后端 , tomcat只能接收这种形式的键值对  'Content-Type: application/x-www-form-urlencoded'// 3 它会将请求体的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件  'Content-Type: multipart/form-data'

axios

这里的axios我也是使用的不多,之前也没怎么用过,用的时候几乎直接get请求了,今天我post请求了半天,也算是搞懂了一个,axios默认会变成json格式,而且后端tomcat只能接收application/x-www-form-urlencoded,所以也是查了半天,慢慢了解吧,这里怎么使用呢;

这里参考了几篇博客,用的是这篇博客的解决办法:https://blog.csdn.net/wp1993101/article/details/80564941

两种方式,第一种注释掉了:

function funa(){/* axios.post('${pageContext.request.contextPath}/HelloServlet',{"name":"xuexiriji"})  .then(function (res) {    // 请求成功返回    console.log(res.data);  }); */    let params = new URLSearchParams();    params.append("name", "xuexiriji");    //axios.defaults.headers["Content-Type"] = "application/x-www-form-urlencoded";axios({ method:"POST", url:"${pageContext.request.contextPath}/HelloServlet", data:params, headers:{ "Content-Type":"application/x-www-form-urlencoded" }}).then(response=>{    console.log(response.data);});}

最后也算是测试成功:

在这里插入图片描述

那如果请求再配上vue进行数据渲染,真的特别方便,所以这就是ajax异步技术的好处,如果到这里你还不理解,那就赶紧动手吧,只有你动手才会理解,就好像之前我一直认为不就是封装嘛,在封装也是那样,但是遇到问题呢,底层原理还是不够基础,或者说还是不动手,不动手这些问题都碰不上,所以快去测试下吧!

最后,希望大家可以三连,谢谢~