Ajax&Axios

Ajax

概念

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

作用

  • 与服务器进行数据交换:通过AJAX可以给服务器发送请求,并获取服务器响应的数据
  • 后台发送:浏览器的请求是后台js发送给服务器的,js会创建单独的线程发送异步请求,这个线程不会影响浏览器的线程运行
  • 局部刷新:浏览器接收到结果以后进行页面局部刷新

未使用Ajax和使用Ajax后对比

  • 没学习AJAX之前发送请求和获取响应的方式
image-20221106155023762.png
- 浏览器发送HTTP返回的是一个完整的网页,浏览器会显示这个网页
- 浏览器会等待服务器的响应(同步请求)
  • 学习AJAX之后
image-20221106155200255.png
  • AJAX返回的是部分数据,浏览器内容不会变化
  • 后台发送,不影响浏览器的操作(异步请求)

例子

使用了AJAX和服务器进行通信,就可以使用 HTML+AJAX来替换JSP页面了

  • 使用HTTP获取一个完整的网页
image-20221106155358377.png
  • 登录的时候输入用户名,失去焦点的时候,就会使用AJAX发送一个异步请求到后台,然后返回用户存在与否的结果
image-20221106155433408.png

Ajax原生API

  • 创建 XMLHttpRequest 对象:用于和服务器交换数据
let xmlhttp = new XMLHttpRequest()
  • 设置状态回调监听,获取服务器响应数据
xmlHttp.onreadystatechange=function (){
    if(xmlHttp.readyState==4 && xmlHttp.status=200){
        alert(xmlHttp.responseText);
    }
}
  • 发送请求
//设置请求方式和资源地址
xmlhttp.open("GET",“url");
//发送请求
xmlhttp.send();
  • API简介
属性 描述
onreadystatechange 定义了当 readyState 属性发生改变时所调用的函数。
readyState 保存了 XMLHttpRequest 的状态。
0: 请求未初始化
1: 服务器连接已建立
2: 请求已接收
3: 正在处理请求
4: 请求已完成且响应已就绪
status 200: "OK"
403: "Forbidden"
404: "Page not found"
statusText 返回状态文本(例如 "OK" 或 "Not Found")

Ajax快速入门

学习网站:https://www.w3school.com.cn/

步骤

  • 编写AjaxServlet,并使用response输出字符串
/**
 * Ajax 异步的JavaScript和XML
 */
@WebServlet(value = "/ajaxServlet")
public class AjaxServlet extends HttpServlet {
    private static final long serialVersionUID = -2594113160049777689L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().write("hello ajax");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}
  • 编写HTML
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Ajax快速入门</title>
</head>
<body>
<script>
    //创建Ajax的核心对象
    let xmlHttpRequest = new XMLHttpRequest();
    //设置监听,获取请求的响应数据(onreadystatechange 就是在状态变化时进行回调)
    xmlHttpRequest.onreadystatechange = function () {
        //readyState == 4 表示请求完成,并且可以返回了响应数据到浏览器
        //status == 200 表示响应码,200为请求成功,就可以获取响应数据
        if (xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200) {
            alert(xmlHttpRequest.responseText);
        }
    }
    //请求方式和URL的配置,并发送请求
    xmlHttpRequest.open('GET', "ajaxServlet");
    xmlHttpRequest.send();
</script>
</body>
</html>

Axios异步框架

注意:axios会自动将字符串truefalse转换为boolean类型

Axios快速入门

步骤:

  • 编写AxiosServlet,接收请求参数,并使用response输出字符串
@WebServlet(value = "/axiosServlet")
public class AxiosServlet extends HttpServlet {
    private static final long serialVersionUID = 7336379928784176967L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("接收到axios的请求:" + username + "=" + password);
        response.getWriter().write("hello " + username);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}
  • 下载并引入axios的js文件
<script src="js/axios-0.18.0.js"></script>
  • 发送GET请求
axios({
    method: "GET",
    url: "axiosServlet?username=zhangsan&password=333"
}).then(resp => {
    //resp 表示响应对象,resp.data,表示响应数据
    alert(resp.data)
});
  • 发送POST请求
axios({
    method: "POST",
    url: "axiosServlet",
    data: "username=lisi&password=444"
}).then(resp => {
    alert(resp.data)
});
  • 编写HTML
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Axios快速入门</title>
    <script src="js/axios-0.18.0.js"></script>
</head>
<body>
<button onclick="testGet()">GET请求</button>
<button onclick="testPost()">Post请求</button>
<script>
    //使用Axios的GET请求
    function testGet() {
        axios({
            method: "GET",
            url: "axiosServlet?username=zhangsan&password=333"
        }).then(resp => {
            //resp 表示响应对象,resp.data,表示响应数据
            alert(resp.data)
        });
    }

    //使用Axios的POST请求
    function testPost() {
        axios({
            method: "POST",
            url: "axiosServlet",
            data: "username=lisi&password=444"
        }).then(resp => {
            alert(resp.data)
        });
    }
</script>
</body>
</html>

Axios 请求方式别名

  • 为了方便起见, Axios 已经为所有支持的请求方法提供了别名
axios.request(config)

axios.get(url[, config])

axios.delete(url[, config])

axios.head(url[, config])

axios.options(url[, config])

axios.post(url[, data[, config]])

axios.put(url[, data[, config]])

axios.patch(url[, data[, config]])
  • 常用的别名
方法名 作用
get(url) 发起GET方式请求
post(url,请求参数) 发起POST方式请求
  • 发送GET请求
axios.get("axiosServlet?username=zhangsan&password=333")
.then(resp => {
    //resp.data 代表响应的数据
    alert(resp.data)
});
  • 发送POST请求
axios.post("axiosServlet", "username=wangwu&password=555")
.then(resp => {
    alert(resp.data)
});
  • 编写HTML
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Axios别名</title>
    <script src="js/axios-0.18.0.js"></script>
</head>
<body>
<button onclick="testGet()">GET请求</button>
<button onclick="testPost()">Post请求</button>
<script>
    //使用Axios的别名,进行GET请求
    function testGet() {
        //参数:请求路径和请求参数(存放在请求行)
        axios.get("axiosServlet?username=zhangsan&password=333")
            .then(resp => {
                //resp.data 代表响应的数据
                alert(resp.data)
            });
    }

    //使用Axios的别名方式,进行POST请求
    function testPost() {
        //第一个参数:请求路径(存放在请求行)
        //第二个参数:请求参数(存放在请求体)
        axios.post("axiosServlet", "username=wangwu&password=555")
            .then(resp => {
                alert(resp.data)
            });
    }
</script>
</body>
</html>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,386评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,142评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,704评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,702评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,716评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,573评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,314评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,230评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,680评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,873评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,991评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,706评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,329评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,910评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,038评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,158评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,941评论 2 355

推荐阅读更多精彩内容