当前位置: 首页 > ds >正文

Javaweb - 13 - AJAX

发送请求的几种方式

1. 浏览器的地址框中输入地址,回车

2. html --> head --> scrip / link

                                img  自动发送请求,无需手动触发

3. a 标签,form 表单标签

     需要手动控制提交产生,且往往需要在新的页面上获得响应信息

4. 运行 JS 代码产生请求

        我们通过事件触发 JS 代码运行,发送请求

        响应后我们可以通过 JS 代码动态处理是否要跳转

        或者要将响应的信息通过 DOM 编程显示在 dom 树中

通过第 4 中发送请求的方法,就可以实现如下功能:

当用户在注册页面中,用户名为 zhangsan 的时候,这个事件会触发 JS 代码运行,向后端发送请求,可以将响应的信息通过 DOM 编程显示在 dom 树中

什么是 AJAX

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)

AJAX 不是新的编程语言,而是一种使用现有标准的新方法

AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据,并更新部分前端显示页面的内容

AJAX 不需要任何浏览器插件,但需要用户允许 JavaScript 在浏览器上执行

XMLHttpRequest 只是实现 AJAX 的一种方法(原生 JS 的实现方式)


同步交互:发送方发出请求后,必须等待接收方处理并返回,在此期间,发送方会处于“阻塞”状态,无法继续执行其他操作,直到收到响应后才会继续执行。

异步交互:发送方发出请求后,无需等待接收方返回响应,而是继续执行后续操作。接收方处理完请求后,会通过某种方式,将结果反馈给发送方,双方操作在时间上可以“不同步”。

如何实现 AJAX 请求

index.html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
<script>function getMessage() {// 实例化一个 xmlHttpRequestvar request = new XMLHttpRequest();// 设置 xmlHttpRequest 对象的回调函数// request.readState 1 2 3 4// request.status 响应状态码 响应行状态码request.onreadystatechange = function (){if (request.readyState == 4 && request.status == 200) {// 接收响应结果,处理结果// 将响应放到指定的位置var inputEle = document.getElementById("message");inputEle.value = request.responseText;}}// 设置发送请求的方式和请求的资源路径request.open("GET", "/hello?username=zhangsan");// 发送请求request.send();}
</script>
</head>
<body>
<button onclick="getMessage()">按钮</button>
<input type = "text" id = "message" />
</body>
</html>

helloServlet.java:

@WebServlet("/hello")
public class helloServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 接收参数String username = req.getParameter("username");// 做出响应resp.getWriter().write("hello" + username);}
}

完!

http://www.xdnf.cn/news/16682.html

相关文章:

  • Qt|槽函数耗时操作阻塞主界面问题
  • Chrome 提示 “此扩展程序不再受支持”(MacOS/Windows)
  • WindowsAPI|每天了解几个winAPI接口之网络配置相关文档Iphlpapi.h详细分析六
  • C++异常捕获:为何推荐按引用(by reference)捕获?
  • 华为昇腾芯片:多模态模型国产化的硬核突破
  • Ext JS极速项目之 Coworkee
  • ETH 交易流程深度技术详解
  • Linux进程概念(五)进程地址空间
  • 凸优化:凸函数的一些常用性质
  • 低成本嵌入式Linux开发方案:通过配置文件实现参数设置
  • 基于黑马教程——微服务架构解析(二):雪崩防护+分布式事务
  • 如何在 Ubuntu 24.04 或 22.04 Linux 上安装和使用 NoMachine
  • JavaScript 回调函数讲解_callback
  • 力扣7:整数反转
  • golang--通道和锁
  • 做了一款小而美的本地校验器
  • jimfs:Java内存文件系统,脱离磁盘IO瓶颈利器
  • 使用Docker在Rocky Linux 9.5上在线部署LangFlow
  • 【力扣热题100】哈希——两数之和
  • 基于深度学习的医学图像分析:使用3D CNN实现肿瘤检测
  • 智慧工地系统:科技赋能建筑新未来
  • 采用黑翅鸢优化算法BKA-CNN-LSTM、CNN-LSTM、LSTM、CNN四模型多变量回归预测,多输入单输出(Matlab)
  • nifi 访问Kerberos的kafka集群
  • 【行测】常识判断1
  • 图解系统的学习笔记--硬件结构
  • 【安卓笔记】OOM与内存优化
  • Sentinel 不同层面的流控保护
  • Ubuntu、pytorch、mamba安装
  • SD卡简介与驱动开发
  • kotlin基础【3】