Ajax详解

文章目录

  • 1. 概述
    • 1.1 Ajax工作原理
    • 1.2 Ajax的作用
    • 1.3 同步异步
  • 2. 原生Ajax
  • 3. Axios
    • 3.1 Axios的基本使用
    • 3.2 Axios快速入门
    • 3.3 请求方法的别名

1. 概述

Ajax 是 “Asynchronous JavaScript and XML”(异步 JavaScript 和 XML)的缩写。它是一种在无需重新加载整个网页的情况下,与服务器交换数据并更新部分网页内容的技术。简单来说,Ajax 可以让网页在不影响用户体验的前提下,实时更新数据。

1.1 Ajax工作原理

Ajax 的工作原理如下:

  1. 用户在浏览器上执行某项操作(如点击按钮)。
  2. JavaScript 调用 Ajax,并向服务器发送请求。
  3. 服务器处理请求。
  4. 服务器将响应发送回网页。
  5. JavaScript 读取响应。
  6. HTML 和 CSS 根据 JavaScript 处理的数据进行更新。

1.2 Ajax的作用

这种方式的优点是,只有需要更新的部分才会发送请求和接收响应,大大减少了数据传输量,提高了应用程序的性能和用户体验。即异步交互。

不过,需要注意的是,虽然 Ajax 的名称中包含 “XML”,但现在的数据格式并不一定是 XML,很多时候我们会使用 JSON 格式,因为 JSON 更易于在 JavaScript 中处理。

如下图所示,当我们再百度搜索java时,下面的联想数据是通过Ajax请求从后台服务器得到的,在整个过程中,我们的Ajax请求不会导致整个百度页面的重新加载,并且只针对搜索栏这局部模块的数据进行了数据的更新,不会对整个页面的其他地方进行数据的更新,这样就大大提升了页面的加载速度,用户体验高。
在这里插入图片描述

1.3 同步异步

针对于上述Ajax的局部刷新功能是因为Ajax请求是异步的,与之对应的有同步请求。接下来我们介绍一下异步请求和同步请求的区别。

  • 同步请求发送过程如下图所示:
    在这里插入图片描述
    浏览器页面在发送请求给服务器,在服务器处理请求的过程中,浏览器页面不能做其他的操作。只能等到服务器响应结束后才能,浏览器页面才能继续做其他的操作。

  • 异步请求发送过程如下图所示:
    在这里插入图片描述
    浏览器页面发送请求给服务器,在服务器处理请求的过程中,浏览器页面还可以做其他的操作。

2. 原生Ajax

原生的 AJAX 指的是直接使用 JavaScript 的 XMLHttpRequest 对象来创建和发送 AJAX 请求,而不是使用 jQuery 或其他 JavaScript 库。下面是一个基本的 AJAX 请求的例子,使用原生的 JavaScript 实现:

// 创建一个新的 XMLHttpRequest 对象
var xhr = new XMLHttpRequest();// 配置请求
xhr.open('GET', 'https://api.example.com/data', true);// 设置请求完成后的处理函数
xhr.onload = function () {// 检查 HTTP 响应状态码if (xhr.status >= 200 && xhr.status < 300) {// 当请求成功完成时,解析响应数据var data = JSON.parse(xhr.responseText);console.log(data);} else {// 当请求失败时,打印错误信息console.log('Error: ' + xhr.status);}
};// 设置请求错误时的处理函数
xhr.onerror = function () {console.log('Request failed');
};// 发送请求
xhr.send();

3. Axios

Axios 是一个非常流行的 JavaScript 库,主要用于浏览器和 Node.js 中的 HTTP 客户端。Axios 提供了一个简洁且直观的 API,可以用来发送 HTTP 请求。Axios 支持 Promise API,使异步处理变得更加简单,代码也更容易理解。

以下是一个使用 Axios 发送 GET 请求的基本示例:

axios.get('https://api.example.com/data').then(function (response) {// 当请求成功时,处理响应数据console.log(response.data);}).catch(function (error) {// 当请求失败时,处理错误console.log(error);});

3.1 Axios的基本使用

Axios的使用比较简单,主要分为2步:

  • 引入Axios文件
<script src="js/axios-0.18.0.js"></script>
  • 使用Axios发送请求,并获取响应结果,官方提供的api很多,此处给出2种,如下
    • 发送 get 请求
axios({method:"get",url:"http://localhost:8080/ajax-demo1/aJAXDemo1?username=zhangsan"
}).then(function (resp){alert(resp.data);
})
    • 发送 post 请求
axios({method:"post",url:"http://localhost:8080/ajax-demo1/aJAXDemo1",data:"username=zhangsan"
}).then(function (resp){alert(resp.data);
});

axios()是用来发送异步请求的,小括号中使用 js的JSON对象传递请求相关的参数:

  • method属性:用来设置请求方式的。取值为 get 或者 post。
  • url属性:用来书写请求的资源路径。如果是 get 请求,需要将请求参数拼接到路径的后面,格式为: url?参数名=参数值&参数名2=参数值2。
  • data属性:作为请求体被发送的数据。也就是说如果是 post 请求的话,数据需要作为 data 属性的值。

then() 需要传递一个匿名函数。我们将 then()中传递的匿名函数称为 回调函数,意思是该匿名函数在发送请求时不会被调用,而是在成功响应后调用的函数。而该回调函数中的 resp 参数是对响应的数据进行封装的对象,通过 resp.data 可以获取到响应的数据。

3.2 Axios快速入门

  • 后端实现
    查询所有员工信息服务器地址:http://yapi.smart-xwork.cn/mock/169327/emp/list
    根据员工id删除员工信息服务器地址:http://yapi.smart-xwork.cn/mock/169327/emp/deleteById
  • 前端实现
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Ajax-Axios</title><script src="js/axios-0.18.0.js"></script>
</head>
<body><input type="button" value="获取数据GET" onclick="get()"><input type="button" value="删除数据POST" onclick="post()"></body>
<script>function get(){//通过axios发送异步请求-getaxios({method: "get",url: "http://yapi.smart-xwork.cn/mock/169327/emp/list"}).then(result => {console.log(result.data);})}function post(){// 通过axios发送异步请求-postaxios({method: "post",url: "http://yapi.smart-xwork.cn/mock/169327/emp/deleteById",data: "id=1"}).then(result => {console.log(result.data);})}
</script>
</html>

3.3 请求方法的别名

Axios还针对不同的请求,提供了别名方式的api,具体如下:

方法描述
axios.get(url [, config])发送get请求
axios.delete(url [, config])发送delete请求
axios.post(url [, data[, config]])发送post请求
axios.put(url [, data[, config]])发送put请求

我们目前只关注get和post请求,所以在上述的入门案例中,我们可以将get请求代码改写成如下:

axios.get("http://yapi.smart-xwork.cn/mock/169327/emp/list").then(result => {console.log(result.data);
})

post请求改写成如下:

axios.post("http://yapi.smart-xwork.cn/mock/169327/emp/deleteById","id=1").then(result => {console.log(result.data);
})

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java版本企业工程项目管理系统平台源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…

决赛结束,颁奖在即:2023隐私计算大会暨“星河杯”隐私计算大赛颁奖典礼震撼来袭!

7月11日-12日&#xff0c;首届“星河杯”隐私计算大赛4个赛题共计37支团队陆续完成决赛评审&#xff0c;决出的大赛获奖团队代表将受邀出席7月26日在青岛星河湾酒店举办的2023隐私计算大会暨首届“星河杯”隐私计算颁奖典礼。 2023隐私计算大会暨首届“星河杯”隐私计算大赛颁奖…

shell脚本中一个隐晦的bug

1.逻辑表达式if [ ! EXP PATTERN ]不能判断EXP结果为空的情形&#xff1b; 2.而逻辑表达式if [[ EXP ! PATTERN ]可以判断EXP结果为空的情形&#xff1b;

计算机网络 day10 DNAT问题 - 堡垒机 - WLAN

目录 DNAT策略拓扑图&#xff1a; 问题一&#xff1a;当我们访问内网的Web服务的时候&#xff0c;我们防火墙服务器的80端口和Web服务器的8000端口是否需要一直调用程序监控呢&#xff1f; DNAT的作用就是可以帮助我们进行路由转发功能 问题二&#xff1a;当我们在继续DNAT…

【VUE】拖动侧边栏以便自由调整左右两侧的宽度

效果 &#xff08;1&#xff09;拖动前 &#xff08;2&#xff09;拖动后 主要代码 <template><el-row class"contnet" :gutter"20">// 1. 左侧树<el-col id"left-tree" class"left-tree" :offset"0" :…

什么是 Elasticsearch 索引?

作者&#xff1a;David Brimley 索引这个术语在科技界已经被用满了。 如果你问大多数开发人员什么是索引&#xff0c;他们可能会告诉你索引通常指的是关系数据库 (RDBMS) 中与表关联的数据结构&#xff0c;它提高了数据检索操作的速度。 但什么是 Elasticsearch 索引&#xff…

利用Python与ArcGIS工具进行蒸散发ET、植被总初级生产力GPP估算

查看原文>>>基于”Python”多技术融合在蒸散发与植被总初级生产力估算中的实践应用 熟悉蒸散发ET及其组分&#xff08;植被蒸腾Ec、土壤蒸发Es、冠层截留Ei&#xff09;、植被总初级生产力GPP的概念和碳水耦合的基本原理&#xff1b;掌握利用Python与ArcGIS工具进行课…

一篇文章教会你,在IntelliJ IDEA 中,一些让你相见恨晚的技巧

1.Easy Code Easy Code我个人在写博客案例demo时用的比较多&#xff0c;它可以快速的将数据库表映射成Java中的entity、controller、service、dao、mapper等文件&#xff0c;少量编码实现快速开发。 先用database连接数据库&#xff0c;在对应表上直接右键执行EasyCode即可生成…

【PostgreSQL内核学习(三)—— 查询重写】

查询重写 查询重写系统规则视图和规则系统ASLO型规则的查询重写规则系统与触发器的区别 查询重写的处理操作定义重写规则删除重写规则对查询树进行重写 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊重他人的知识产权和学术成果&#xff0c…

Docker 架构解析:多角度解析 Docker 引擎与容器运行时

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

HIVE SQL 根据主键去重并实现其余字段分组聚合

相同个人id下所有字段按时间顺序补位&#xff0c;取首个不为空值 --数据建表 drop table if exists db.tb_name; create table if not exists db.tb_name ( id string,name string,tele string,email string,date string ) ; insert overwrite table db.tb_name values (&qu…

0基础学习VR全景平台篇 第66篇:VR直播-如何管理VR直播活动

一、电脑端管理 已创建好的VR直播活动可以在【管理后台】-【作品管理】-【VR直播】列表下查看到。 1、点击活动标题可以直接进入电脑端的播放页面&#xff0c;点击“编辑”按钮可以进入活动的设置界面。 2、电脑端播放页 该链接地址是可以自适应电脑端和手机端的&#xff0c…