原生实现ajax

news2024/11/30 20:31:19

1 什么是ajax

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

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

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

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

  • XMLHttpRequest 只是实现 Ajax 的一种方式。

ajax工作原理:

  • 简单来说,我们之前发的请求通过类似 form表单标签,a标签 这种方式,现在通过 运行js代码动态决定什么时候发送什么样的请求

  • 通过运行JS代码发送的请求浏览器可以不用跳转页面 ,我们可以在JS代码中决定是否要跳转页面

  • 通过运行JS代码发送的请求,接收到返回结果后,我们可以将结果通过dom编程渲染到页面的某些元素上,实现局部更新

HTML 页面

1. <DOCTYPE html>

这定义了文档类型和版本,告诉浏览器这是一个 HTML5 文档。

2. <html lang="en">

这定义了 HTML 文档的根元素,并设置文档的语言为英语(en)。

3. <head>

这是文档的头部,包含了元数据(如字符编码和标题)以及脚本(如 JavaScript)。

  • <meta charset="UTF-8">:定义文档使用的字符编码为 UTF-8。
  • <title>Title</title>:设置网页的标题为“Title”。
4. <script>

这定义了一个 JavaScript 函数 getMessage

  • 函数内部首先创建了一个新的 XMLHttpRequest 对象,用于发送异步请求。
  • 设置 onreadystatechange 回调函数,当请求的状态发生变化时执行。
  • 在回调函数中,检查请求是否完成(readyState == 4)且响应状态码为 200(表示成功)。
  • 如果请求成功,将响应的文本内容打印到控制台,并将其设置为具有 id="message" 的输入元素的值。
  • 使用 request.open 方法设置请求方法和 URL(/hello?username=zhangsan)。
  • 使用 request.send 方法发送请求。
5. <body>

这是文档的主体部分。

  • <button onclick="getMessage()">按钮</button>:定义一个按钮,当点击时调用 getMessage 函数。
  • <input type="text" id="message"/>:定义一个文本输入框,其 id 为 "message",用于显示从服务器获取的消息。

index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        function getMessage(){
            //实例化一个xmlHttpRequest
            var request = new XMLHttpRequest();
            //设置xmlHttpRequest对象的回调函数
            request.onreadystatechange= function (){
                if(request.readyState == 4 && request.status ==200){
                   console.log(request.responseText)
                    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>

Java Servlet

1. @WebServlet("/hello")

这是一个注解,表示这个 Servlet 响应的 URL 路径为 /hello

2. public class HelloServlet extends HttpServlet

定义了一个名为 HelloServlet 的类,它继承了 HttpServlet

3. service 方法

重写了 service 方法来处理 HTTP 请求。

  • 从请求中获取名为 "username" 的参数。
  • 使用响应的 writer 将 "hello" 和用户名拼接后的字符串写回给客户端。

HelloServlet.java

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        resp.getWriter().write("hello"+username);
    }
}

 

 

总结

      当用户在 HTML 页面上点击按钮时,JavaScript 函数 getMessage 会被调用,该函数会向服务器发送一个 GET 请求到 /hello?username=zhangsan。服务器上的 HelloServlet 会处理这个请求,并返回 "hellozhangsan" 字符串。然后,JavaScript 会将这个字符串设置到 ID 为 "message" 的输入框中。

这样,用户就可以在输入框中看到从服务器返回的消息了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1602751.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

雨伞-浅色脚本

渲染参考&#xff1a;明亮/干净/高级 静帧参考 解说 镜头时长 效果参考 中景画面展示3把竖着的浅色的伞 1s / 特写展示伞把手 1s 中景展示雨伞全貌 2s 微观镜头 缝线动画 3s 镜头旋转至伞面微观材质镜头&#xff0c;展现其多层结构 10s 微观镜头 水珠滑动在伞…

18.读取指定目录下的txt文档时,调用另外一个python文件

1.题目 遍历4K_phone和4K_VR目录下的所有txt文件&#xff0c;并将它们的内容合并到一个名为4k_decoding.txt的文件中。 但是&#xff0c;假设你有一个名为another_script.py的Python文件&#xff0c;你想在合并txt文件之前执行它生成要处理的txt文档。 最后统计完原始的txt文件…

python使用uiautomator2操作真机(华为Honor 10)

环境&#xff1a; python3.8.10&#xff0c;华为手机Honor 10(6G,64g)&#xff0c;版本android 9。 之前写过一篇文章&#xff1a; python使用uiautomator2操作真机_python uiautomator2 控制真机-CSDN博客 今天再拿另外一部手机测试。 一、将手机设置为开发者模式 1、设…

编程入门(三)【GPT工具的使用】

读者大大们好呀&#xff01;&#xff01;!☀️☀️☀️ &#x1f525; 欢迎来到我的博客 &#x1f440;期待大大的关注哦❗️❗️❗️ &#x1f680;欢迎收看我的主页文章➡️寻至善的主页 文章目录 前言背景了解GPT工具使用技巧GPT工具在学习和工作中的应用 前言 背景了解 2…

【错题集-编程题】Fibonacci数列(Fib 数列)

题目链接&#xff1a;Fibonacci数列_牛客题霸_牛客网 (nowcoder.com) 一、分析题目 在求斐波那契数列的过程中判断⼀下&#xff1a;何时 n 会在两个 fib 数之间。 二、代码 #include <iostream> using namespace std;int main() {int n;cin >> n;int a 0, b 1, …

离世界模型更近一步!Meta开源OpenEQA,评估AI Agent情景理解能力

Yann LeCun 朝着 “世界模型” 又近了一步。 Meta最新的开源工作OpenEQA&#xff1a;从文字模型到世界模型&#xff0c;可以像人一样记忆、推理的新基准&#xff0c;AI理解物理空间又近了一步。 场景1: 假设你正准备离开家&#xff0c;但找不到你的工牌。 现在&#xff0c;…

【数据结构3-栈和队列】

数据结构3-栈和队列 1 栈-特殊的线性表-先进后出1.1 栈的三个案例 2 队列-与栈相反-先进先出2.1 队列的案例 3 用C实现栈的代码&#xff1a;4 用C实现队列的代码 1 栈-特殊的线性表-先进后出 1.1 栈的三个案例 2 队列-与栈相反-先进先出 2.1 队列的案例 3 用C实现栈的代码&…

MCU最小系统晶振模块设计

单片机的心脏&#xff1a;晶振 晶振模块 单片机有两个心脏&#xff0c;一个是8M的心脏&#xff0c;一个是32.768的心脏 8M的精度较低&#xff0c;所以需要外接一个32.768khz 为什么是8MHZ呢&#xff0c;因为内部自带的 频率越高&#xff0c;精度越高&#xff0c;功耗越大&am…

引导过程与故障修复

一、Linux操作系统引导过程 1、引导过程总览 开机自检 检查硬件设备&#xff0c;检测出第一个能够引导系统的设备&#xff0c;比如硬盘或者光驱 MBR 引导 运行MBR扇区里的主引导程序GRUB 启动GRUB菜单 统读取GRUB配置文件(/boot/grub2/grub.cfg)获取内核的设置和位置&#xf…

国产主流数据库存储类型简析

国产数据库在技术架构上主要分为集中式、基于中间件分布式和原生分布式架构&#xff0c;衍生出集中式架构和分布式架构。那么在这些部署架构中&#xff0c;从数据分布的视角来看&#xff0c;在数据库中数据分布的形态是怎样的。本文将简要分析OceanBase、PolarDB、OpenGauss、G…

OpenMesh 网格平均曲率计算

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 根据 Laplace-Beltrami 算子与平均曲率法向的关系: 又根据余切 Laplace-Beltrami 算子的定义: 其中 Ai 为该点邻域面积,取 Voronoi cell 面积如下: 得到

jmeter及PTS压测介绍和使用

一、常用压测工具&#xff1a; loadrunner apache ab&#xff08;单接口压测最方便&#xff09; jmeter 阿里云PTS&#xff08;原生上传jmeter脚本进行压测&#xff09; 二、jmeter可以压测不同的协议和应用 web http https jdbc for database TCP 三、使用场景及优点 1、功能…

基于Python大数据的微博舆情分析,微博评论情感分析可视化系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

5.1 iHRM人力资源 - 员工管理

iHRM人力资源 - 员工管理 - 左右侧主体展示 文章目录 iHRM人力资源 - 员工管理 - 左右侧主体展示一、页面主体结构二、页面左树加载2.1 加载左树数据2.2 记录树的切换节点 三、右侧员工列表3.1 列表结构3.2 员工数据获取3.3 头像和聘用形式3.4 数据分页3.5 员工模糊搜索 一、页…

ssm055基于spring框架的中小企业人力资源管理系统的设计及实现+jsp

中小企业人力资源管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本中小企业人力资源管理系统就是在这样的大环境下诞生&#xff0c;其可…

基于SpringBoot+Vue的装饰工程管理系统(源码+文档+包运行)

一.系统概述 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统装饰工程项目信息管理难度大&#xff0c;容错率低&a…

5.2 iHRM人力资源 - 员工管理 - 使用文件导入导出员工

iHRM人力资源 - 员工管理 - 导入导出员工 文章目录 iHRM人力资源 - 员工管理 - 导入导出员工一、员工导出Excel二、员工导入Excel2.1 Excel导入组件封装2.2 下载导入模板2.3 Excel 导入功能 三、删除员工 一、员工导出Excel 这个地方涉及一个接口二进制流blob 就是下面这一大片…

力扣HOT100 - 234. 回文链表

解题思路&#xff1a; class Solution {public boolean isPalindrome(ListNode head) {List<Integer> list new ArrayList<Integer>();// 将链表的值复制到数组中ListNode cur head;while (cur ! null) {list.add(cur.val);cur cur.next;}// 使用双指针判断是否…

力扣hot100:136. 只出现一次的数字 及其衍生

文章目录 一、LeetCode&#xff1a;136. 只出现一次的数字 使用到的异或运算的特点&#xff1a; 两个相同的数异或&#xff0c;结果为0 一、LeetCode&#xff1a;136. 只出现一次的数字 LeetCode&#xff1a;136. 只出现一次的数字 这里数组nums的特点是&#xff0c;除了一…

线程控制及线程底层原理

thread id 本质是一个地址。 以十六机制打印id。 线程终止的两种方法。 1.直接return&#xff1b; 2.pthread_exit(); 注意exit()是用来终止进程的&#xff0c;不能用于线程。 那怎么获取线程的返回值呢&#xff1f; 首先&#xff0c;和进程一样&#xff0c;线程退出也需要…