使用axios封装AJAX

news2024/10/7 15:09:25

一 、Http 请求报文

包括了三部分: 求情行、请求头,请求体。
在这里插入图片描述

1、请求行:
是HTTP请求的第一行,包含了请求方法、请求目标和HTTP协议版本。常用的请求方法有GET、POST、PUT、DELETE等,用于指定客户端希望服务器执行的操作。请求目标是指请求的资源路径,可以是一个具体的文件路径或者是一个URL。HTTP协议版本通常是HTTP/1.1。
请求类型:
在这里插入图片描述

2、请求头:
请求头包含了客户端向服务器传递的额外信息,以键值对的形式表示。常见的请求头有以下几种:请求头可以包含多个。

  • Host:指定服务器的主机名和端口号。
  • User-Agent:标识客户端的类型和版本信息,用于服务器识别客户端。
  • Accept:指定客户端能够接受的响应内容类型。
  • Content-Type:指定请求体的数据类型,常用的有application/json、application/x-www-form-urlencoded等。
  • Authorization:用于身份验证,包含了客户端的身份凭证。
    除了上述常见的请求头,还有很多其他的请求头可以用于传递不同的信息,具体使用取决于需求。
  • Cookie: 携带cookie数据。

3、请求体:
请求体是可选的,用于传递客户端向服务器发送的数据。它通常用于POST、PUT等请求方法,用于传递表单数据、JSON数据等。请求体的格式取决于Content-Type请求头的值。

//请求体的格式有两种,需要告诉服务器,是通过求情头的Content-Type来告诉我的。
// 第一种格式:application/x-www-form-urlencoded
username=lvmanba&age=20
// 第二种格式:application/json
{
   "username":lvmanba, "age": 20}
// 第三种格式:multipart/form-data 文件上次

在这里插入图片描述

在这里插入图片描述

二、 Http 响应报文

响应状态行:

响应状态码(status),响应对应的文本描述(statusText)
在这里插入图片描述

多个响应头:

//响应回来内容的格式有text/html,text/json
//charset 是响应回来的内容的编码
Content-Type: text/html; charset=utf-8
//当浏览器接收到这个响应后,会按照 Set-Cookie 指令来存储 Cookie。这些 Cookie 之后会在同一域名下的请求中自动附加到请求头中,供服务器读取。
Set-Cookie: BD_CK_SAM=1; path=/

响应体:

html 文本 / json 文本 / js / css / 图片…

三、访问地址风格API分类

1、REST API: restful

(1)、发送请求进行CRUD 哪个操作由请求方式来决定
(2)、同一个请求路径可以进行多个操作
(3)、请求方式会用到GET/POST/PUT/DELETE

2、非REST API: restless

(1)、请求方式不决定请求的CRUD 操作
(2)、一个请求路径只对应一个操作
(3)、一般只有 GET/POST

四、使用json-server 搭建环境

json-server是一款 json 数据服务器,它运行在 Express 服务器,可以对json文件、js脚本生成的json数据、远程json数据进行restful风格的增删改查操作,通过指定一个json文件作为api数据源,可以进行分页、排序、关联查询、范围查询等各种查询操作,是一套完整的模拟 REST API 接口。

1、安装

npm install -g json-server

2、创建一个json文件

文件名为 data.json

{
   
  "posts": [
    {
    "id": "1", "title": "a title", "views": 100 },
    {
    "id": "2", "title": "another title", "views": 200 }
  ],
  "comments": [
    {
    "id": "1", "text": "a comment about post 1", "postId": "1" },
    {
    "id": "2", "text": "another comment about post 1", "postId": "1" }
  ],
  "profile": {
   
    "name": "typicode"
  }
}

3、运行json-server

在data.json的目录(D:\demo),运行cmd,然后键入: json-server --watch db.json
在这里插入图片描述
打开 index
在这里插入图片描述
提示:两种风格返回的结果一个是数组,另外一个是对象。如下图所示。
在这里插入图片描述
也可以改变端口和路由规则:

# 第一种:默认的运行方式
D:\demo> json-server --watch data.json   // 更改默认端口(3000) 不加watch也可以。
D:\demo> json-server data.json

# 第二种:更改端口号
D:\demo> json-server -p 8888 data.json

# 第三种 配置主机地址
D:\demo> json-server -H 0.0.0.0 data.json   

# 第四种 新增配置 添加自定义路由,根目录下新建routes.json文件,内容如下
{
   
  "/api/*": "/$1",
  "/:resource/:id/show": "/:resource/:id",
  "/posts/:category": "/posts?category=:category",
  "/articles?id=:id": "/posts/:id"
}
D:\demo> json-server data.json --routes routes.json

五、XHR封装自己的ajax

要求:我们根据axiso的功能,自己来模仿者构建一个类似的。
1、返回值类型为promise,成功的结果为response,异常的结果为err。
2、能处理多种求情 GET/POST/PUT/DELETE
3、函数的参数为一个一个配置对象

{
   
	url:'',  //请求地址
	method: '', //请求方法GET/POST/PUT/DELETE
	params:{
   }, //GET/DELETE请求的query参数
	data:{
   },  //POST/DELETE 请求的请求体参数
}

4、响应json数据自动解析为js

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <div class="container">
        <br>
        <button class="btn btn-primary" type="button" id="testGet" >GET请求</button>
    </div>
    <script>
        const testGet = document.querySelector("#testGet")
        testGet.addEventListener("click",function(){
     
            axios({
     
                    url: 'http://localhost:3000/posts2',
                    method: 'GET',
                    params: {
     
                        id: 1,
                        xxx: 'abc'
                    }
                }).then(err=>{
     
                response => {
     
                    console.log(response)
                },
                error => {
     
                    alert(error.message)
                }
            })
        });
        //对象解构语法,无论是对象使用还是函数使用返回来的都是promise结构。
        function axios({
     
            url,
            method='GET',
            params = {
     },  //自动附加在地址栏上
            data={
     }
        }){
     
            //返回一个promise对象
            return new Promise((resolve,reject)=>{
     
                method = method.toUpperCase()  //全部转为大写。
                //处理query参数,拼接在url上, 如?id=1&name=''

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

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

相关文章

国外电商系统开发-运维系统资产属性-命令执行功能

当前开发中&#xff0c;还不支持点击拓扑图标打开资产的功能&#xff0c;后期有时间补全对应的开发。 该功能如同Xshell、SecureCRT、Putty一样&#xff0c;可以批量的发送系统命令&#xff0c;让Linux服务器执行。 默认情况下&#xff0c;系统已经选择全部主机&#xff0c;如果…

番外篇 | CRAS-YOLO:基于卫星图像的多类别船舶检测和分类

前言:Hello大家好,我是小哥谈。目前,基于卫星图像的多类别船舶检测和分类由于在军事和民用领域的重要应用而备受关注。针对传统检测效果不佳的情形,我们进一步提出了一种新的多类船检测,称为CRAS-YOLO,它由卷积块注意力模块(CBAM)、感受野块(RFB)和基于YOLOv5s的自适…

2024计算机毕业设计最简单的完成流程

一、计算机专业毕业设计选题-选题推荐 1.基于深度学习的生活垃圾智能分类系统&#xff08;微信小程序YOLOv5训练数据集开题报告中期检查论文&#xff09; &#xff08;1&#xff09;程序界面 &#xff08;2&#xff09;论文大纲 &#xff08;3&#xff09;论文详情链接 基于…

【高等代数笔记】线性空间(十九-二十四上半部分)

课程视频剪辑得太抽象了&#xff0c;一节课不能完整学完&#xff0c;拆的零零散散得。 3. 线性空间 3.19 满秩矩阵 【推论4】设 rank ( A ) r \text{rank}(\boldsymbol{A})r rank(A)r&#xff0c;则 A \boldsymbol{A} A的不为0的 r r r阶子式所在的列&#xff08;行&#x…

75 华三vlan端口隔离

华三vlan端口隔离 为了实现端口间的二层隔离&#xff0c;可以将不同的端口加入不同的VLAN&#xff0c;但VLAN资源有限。采用端口隔离特性&#xff0c;用户只需要将端口加入到隔离组中&#xff0c;就可以实现隔离组内端口之间二层隔离&#xff0c;而不关心这些端口所属VLAN&…

【每日一题 | 24.10.7】Fizz Buzz 经典问题

1. 题目2. 解题思路3. 代码实现&#xff08;AC_Code&#xff09; 个人主页&#xff1a;C_GUIQU 归属专栏&#xff1a;每日一题 1. 题目 Fizz Buzz 经典问题 2. 解题思路 【法1】逻辑硬解&#xff1a;按照题目逻辑分四种情况&#xff0c;用if else 判断即可。 【法2】switc…

大数据新视界 --大数据大厂之 Ibis:独特架构赋能大数据分析高级抽象层

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

【电力系统】基于MATLAB的储能辅助电力系统调峰的容量需求研究

摘要 本研究基于MATLAB仿真平台&#xff0c;探讨了储能系统在电力系统中辅助调峰的容量需求问题。通过对风电、微型燃气机等分布式能源的实际出力曲线与理论输出进行比较分析&#xff0c;我们探讨了在不同负荷条件下储能系统的调峰能力。实验结果表明&#xff0c;储能系统的合…

js逆向--某招标公告公示搜索引擎DES解密

js逆向--某招标公告公示搜索引擎DES解密 一、寻找数据接口二、寻找解密入口三、编写代码一、寻找数据接口 打开网页,在搜索框中输入关键词python。 试图通过按F12或者右键打开开发者工具,发现均没有反应。这时需要点击浏览器右上角的三个点,然后点击更多工具–开发者工具,…

(笔记)第三期书生·浦语大模型实战营(十一卷王场)–书生基础岛第5关---XTuner 微调个人小助手认知

学员闯关手册&#xff1a;https://aicarrier.feishu.cn/wiki/ZcgkwqteZi9s4ZkYr0Gcayg1n1g?open_in_browsertrue 课程视频&#xff1a;https://www.bilibili.com/video/BV1tz421B72y/ 课程文档&#xff1a; https://github.com/InternLM/Tutorial/tree/camp3/docs/L1/XTuner 关…

复现文章:R语言复现文章画图

文章目录 介绍数据和代码图1图2图6附图2附图3附图4附图5附图6 介绍 文章提供画图代码和数据&#xff0c;本文记录 数据和代码 数据可从以下链接下载&#xff08;画图所需要的所有数据&#xff09;&#xff1a; 百度云盘链接: https://pan.baidu.com/s/1peU1f8_TG2kUKXftkpYq…

【unity进阶知识8】unity场景Scene的使用, 如何封装一个场景管理器

文章目录 一、场景基本操作1、加载切换场景2、获取场景信息3、激活场景4、场景基本属性获取5、已加载场景个数6、获取场景中所有物体7、创建新场景8、卸载销毁场景 二、使用协程方法来异步加载场景1、AsyncOperation相关的代码应写在一个协同程序中。2、allowSceneActivation加…

TypeScript:装饰器

一、简介 随着TypeScript和ES6里引入了类&#xff0c;在一些场景下我们需要额外的特性来支持标注或修改类及其成员。 装饰器&#xff08;Decorators&#xff09;为我们在类的声明及成员上通过元编程语法添加标注提供了一种方式。 Javascript里的装饰器目前处在 建议征集的第二阶…

LeetCode 54 Spiral Matrix 解题思路和python代码

题目&#xff1a; Given an m x n matrix, return all elements of the matrix in spiral order. Example 1: Input: matrix [[1,2,3],[4,5,6],[7,8,9]] Output: [1,2,3,6,9,8,7,4,5] Example 2: Input: matrix [[1,2,3,4],[5,6,7,8],[9,10,11,12]] Output: [1,2,3,4,8,1…

进程间通信——《匿名管道》

文章目录 前言&#xff1a;进程间通信介绍进程间通信目的进程之间如何通信&#xff1f;进程间通信分类 管道什么是管道&#xff1f;匿名管道&#x1f9e8;尝试使用&#xff1a;&#x1f357;处理细节问题&#xff1a; &#x1f680;管道的4种情况和5种特征&#xff1a;4种情况&…

C++引用(变量引用、数组引用与数组指针、引用本质-指针常量、常量引用)

C语言 ——对数组名进行解引用,取地址,还有sizeof和strlen进行操作解析_对数组名解引用得到什么-CSDN博客 C++引用(变量引用、数组引用与数组指针、引用本质-指针常量、常量引用)_c++11 数组引用-CSDN博客

【智能算法应用】指数分布优化算法求解二维路径规划问题

摘要 本项目采用指数分布优化算法来求解二维路径规划问题。通过构建合理的代价函数并结合智能算法进行优化&#xff0c;我们可以在复杂环境中找到最优路径。实验结果表明&#xff0c;该算法在多维空间中表现出高效性和稳定性。 理论 路径规划问题的核心在于从起点到终点选择…

中国喀斯特地貌分布shp格式数据

​ 中国几乎各省区都有不同面积的石灰岩的分布&#xff0c;出露地表的总面积约有130万平方公里&#xff0c;约占全国总面积的13.5%。被埋藏于地下的则更为广泛&#xff0c;有的地区累计厚度可达几千米。以至上万米。由此可见&#xff0c;喀斯特地形的研究对中国来说&#xff0c…

Nuxt.js 应用中的 link:prefetch 钩子详解

title: Nuxt.js 应用中的 link:prefetch 钩子详解 date: 2024/10/7 updated: 2024/10/7 author: cmdragon excerpt: link:prefetch 是一个强大的钩子,允许开发者在链接预取时执行附加逻辑。合理利用这个钩子,可以帮助优化页面的加载速度和用户体验,提升 Web 应用的整体性…

气膜馆的多元化盈利模式与市场前景—轻空间

随着市场经济的不断繁荣&#xff0c;气膜馆作为一种创新型场馆&#xff0c;凭借其独特的结构设计和灵活的运营模式&#xff0c;逐渐成为创业者关注的焦点。那么&#xff0c;气膜馆如何通过多元化经营实现盈利&#xff1f;本文将为您详细解析气膜馆的经营模式与发展机会。 气膜馆…