AJAX

简介: AJAX是一种基于Web技术的方法,它通过使用JavaScript和XMLHttpRequest对象,实现在不刷新整个页面的情况下与服务器进行数据交换和更新局部内容的能力。这种异步通信的方式可以提高用户体验,使网站更加动态和交互

1、什么是AJAX

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

AJAX作用:

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

没学习AJAX之前发送请求和获取响应的方式:

image-20221106155023762

  • 浏览器发送HTTP返回的是一个完整的网页,浏览器会显示这个网页,
  • 浏览器会等待服务器的响应(同步请求)

学习AJAX之后

image-20221106155200255

  • AJAX返回的是部分数据,浏览器内容不会变化
  • 后台发送,不影响浏览器的操作(异步请求)

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

  1. 使用HTTP获取一个完整的网页

image-20221106155358377

  1. 登录的时候输入用户名,失去焦点的时候,就会使用AJAX发送一个异步请求到后台,然后返回用户存在与否的结果

image-20240121173539302

2、AJAX快速入门

参考网址:https://www.w3school.com.cn/

步骤:

  1. 编写AjaxServlet,并使用response输出字符串

  2. 创建 XMLHttpRequest 对象:用于和服务器交换数据

 let xmlhttp = new XMLHttpRequest()
  1. 向服务器发送请求
xmlhttp.open("GET",“url");
xmlhttp.send();//发送请求
  1. 获取服务器响应数据
xmlHttp.onreadystatechange=function (){
   
   
    if(xmlHttp.readyState==4 && xmlHttp.status=200){
   
   
        alert(xmlHttp.responseText);
    }
}

代码实现

属性 描述
onreadystatechange 定义了当 readyState 属性发生改变时所调用的函数。
readyState 保存了 XMLHttpRequest 的状态。
0: 请求未初始化
1: 服务器连接已建立
2: 请求已接收
3: 正在处理请求
4: 请求已完成且响应已就绪
status 200: "OK"
403: "Forbidden"
404: "Page not found"
statusText 返回状态文本(例如 "OK" 或 "Not Found")

1.创建AjaxServlet

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet(value = "/ajaxServlet")
public class AjaxServlet extends HttpServlet {
   
   
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
   
        //get请求
        response.getWriter().write("hello ajax!!!");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
   
        //post请求
        doGet(request, response);
    }
}
  1. 编写01_ajaxhello.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ajax 入门</title>
</head>
<body>

  <script>
    //1.创建核心对象
    let xmlHttp = new XMLHttpRequest();
    //2.设置请求地址,发送请求到服务器
    //2.1设置请求地址和方式
    xmlHttp.open("GET","ajaxServlet")
    //2.2发送请求,因为是get请求所以不需要传递body
    xmlHttp.send();
    //3.处理响应
    xmlHttp.onreadystatechange = function (){
    
    
         //this.readyState == 4 请求已完成且响应已就绪
        //this.status == 200 表示响应成功
      if(this.readyState == 4 && this.status == 200){
    
    
        alert(this.responseText);
      }

    }
  </script>

</body>
</html>

3、Axios异步框架

3.1、Axios 快速入门

步骤:

1、引入 axios 的 js 文件

<script src="js/axios-0.18.0.js"></script>

2、使用axios 发送请求,并获取响应结果

  //1.GET请求
  axios({
   
   
 method:"GET",
 url:"ajaxServlet"
  }).then(resp=>{
   
   
 alert("GET: "+ resp.data);
  });
  axios({
   
   
      method: "POST",
      url: "ajaxServlet",
      data:"username=zhangsan&password=333"
  }).then(resp=>{
   
   
      alert("POST: "+ resp.data);
  });

完整代码:

  • ajaxServlet
package com.itheima.servlet;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet(value = "/ajaxServlet")
public class AjaxServlet extends HttpServlet {
   
   
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
   
        //get请求
        //获取ajax的post请求
        String username = request.getParameter("username");
        System.out.println("username = " + username);
        String password = request.getParameter("password");
        System.out.println("password = " + password);
        response.getWriter().write("hello ajax!!!");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
   
        //post请求
        doGet(request, response);
    }
}
  • 03_axios.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>

<script>
  //1.GET请求
  // axios({
    
    
  //   method:"GET",
  //   url:"ajaxServlet"
  // }).then(resp=>{
    
    
  //   alert("GET: "+ resp.data);
  // });

  //2.POST请求
  axios({
    
    
      method: "POST",
      url: "ajaxServlet",
      data:"username=zhangsan&password=333"
  }).then(resp=>{
    
    
      alert("POST: "+ resp.data);
  });

</script>

</body>
</html>

注意:axios会自动将字符串的true和false转换为boolean类型

3.2、Axios 请求方式别名

为了方便起见, Axios 已经为所有支持的请求方法提供了别名。

  1. axios.request(config)
  2. axios.get(url[, config])
  3. axios.delete(url[, config])
  4. axios.head(url[, config])
  5. axios.options(url[, config])
  6. axios.post(url[, data[, config]])
  7. axios.put(url[, data[, config]])
  8. axios.patch(url[, data[, config]])

常用的别名(重点)

方法名 作用
get(url) 发起GET方式请求
post(url,请求参数) 发起POST方式请求
  • 发送GET请求

    axios.get("ajaxServlet")
        .then(resp=>{
         
         
        alert("GET: "+ resp.data);
    });
    
  • 发送POST请求

    axios.post("ajaxServlet","username=zhangsan&password=333")
        .then(resp=>{
         
         
        alert("POST: "+ resp.data);
    })
    
相关文章
电脑上扫码支付功能用法
  PC扫码支付的方式,支持前置模式和跳转模式。  前置模式是将二维码前置到商户的订单确认页的模式。需要商户在自己的页面中以 iframe 方式请求支付宝页面。具体分为以下几种:  0:订单码-简约前置模式,对应 iframe 宽度不能小于600px,高度不能小于300px; qr_pay...
3077 12
|
存储 弹性计算 数据挖掘
云计算在科研计算中的高效应用
云计算在科研计算中的高效应用
224 0
|
机器学习/深度学习 存储 数据可视化
构建个人知识库:Notion vs Roam Research
【5月更文挑战第12天】Notion和Roam Research是两款知名的知识库工具。Notion以其丰富的文本编辑、灵活的笔记组织和强大的集成能力脱颖而出,适合需要多平台同步和精美排版的用户。Roam Research则以双向链接和块概念为核心,构建知识网络,便于发现信息间的关联,适合深度学习和探索性思考。选择取决于个人需求和偏好。
|
测试技术 网络安全 虚拟化
libvirt虚拟机热迁移
验证不同迁移特性下的热迁移效率。
3223 0
|
消息中间件 数据安全/隐私保护 Docker
使用Docker-compose来封装celery4.1+rabbitmq3.7服务,实现微服务架构
大家都知道,Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统,在之前的一篇文章中:[python3.7+Tornado5.1.1+Celery3.1+Rabbitmq3.7.16实现异步队列任务](https://v3u.cn/a_id_99)详细阐述了如何进行安装部署和使用,但是过程太繁琐了,先得安装Erlang,再安装rabbitmq,然后各种配置,最后由于async关键字问题还得去修改三方库的源码,其实我们可以通过docker来将celery服务封装成镜像,如此一来,以后再使用celery或者别的系统依赖celery,我们只需要将该镜像以容器的形式跑服务即可,不需要繁琐的配
使用Docker-compose来封装celery4.1+rabbitmq3.7服务,实现微服务架构
|
前端开发 关系型数据库 MySQL
使用JSP+Servlet+MySQL实现登录注册功能【详细代码】(上)
使用JSP+Servlet+MySQL实现登录注册功能【详细代码】(上)
694 0
使用JSP+Servlet+MySQL实现登录注册功能【详细代码】(上)
|
定位技术 API
QGIS获取天地图发布的部分数据
数据获取一直是诸位GISer老生常谈的话题了,之前分享了《县级行政区划》,但所谓授之以鱼不如授之以渔,今天我们就来手动获取一下这份1:100万全国基础地理数据
715 0
|
移动开发 缓存 小程序
|
JSON 算法 物联网
Coap协议接入物联网平台(java实现)
本文介绍基于开源的CoAP协议进行对称加密自主接入的流程,并提供java示例代码。
Coap协议接入物联网平台(java实现)
|
数据采集 弹性计算 应用服务中间件
飞天加速计划·高校学生在家实践丨ECS使用体验丨宝塔面板实现多端口建站与SG11解密基础学习
大家好!我是呆小猴,软件工程专业,目前是一名大四学生。首先非常感谢阿里云爸爸的这次活动,让我体验了一次什么是云服务器,在这之前只使用过虚拟主机和轻量云服务器,可以感受到了它们之间的差别。很早就关注阿里云之前的学生云翼计划了,可惜一直没有时间,现在刚好参加这次的飞天加速计划,也分享一些我的经验与心得~
1148 0
飞天加速计划·高校学生在家实践丨ECS使用体验丨宝塔面板实现多端口建站与SG11解密基础学习