Ajax 请求数据的 5 种方式 ajax的基础用法 ajax简写 接口相关的基础概念 ajax错误修改 form 表单 & 文件上传 请求报文 & 响应报文

233 阅读12分钟

案例代码详细代码地址:juejin.cn/post/709163…

使用 Ajax 请求数据的 5 种方式

1POST向服务器新增数据
2GET从服务器获取数据
3DELETE删除服务器上的数据
4PUT更新服务器上的数据(侧重于完整更新:例如更新用户的完整信息)
5PATCH更新服务器上的数据(侧重于部分更新:例如只更新用户的手机号)

get请求

GET 请求用于从服务器获取数据:

1651137584250.png

post请求

POST 请求用于向服务器新增数据:

1651137695916.png

delete 请求

DELETE 请求用于删除服务器上的数据

1651137826002.png

put请求

PUT 请求用于更新服务器上的数据(侧重于完整更新:例如更新用户的完整信息):

1651137875496.png

patch 请求

PATCH 请求用于更新服务器上的数据(侧重于部分更新:例如只更新用户的手机号):

1651137901107.png

小结:

操作服务器上的数据除了要使用** URL地址 ,还需要指定请求方式**

操作服务器上的数据时: 获取服务器上的数据,需要使用get方式 新增(添加)数据,需要使用post 方式 删除数据,需要使用delete方式 完整修改(更新)数据,需要使用put方式 修改(更新)部分数据,需要使用patch 方式

ajax的基础用法

axios的基础语法

axios(发音:艾克C奥斯) 是前端圈最火的、专注于数据请求的库。 在后面的 Vue、React 课程中都会用到 axios 来请求数据。 中文官网地址:www.axios-http.cn/ 英文官网地址:www.npmjs.com/package/axi…

1651138812656.png

get请求的查询参数

测试 GET 请求的 URL 地址为 www.itcbc.com:3006/api/getbook…

1651138865148.png

=》result

1651138924684.png

刚才查询回来的是所有图书的列表数据,如果想指定查询的条件,可以通过 params 选项来指定查询的参数

1651138984001.png

1651146035190.png

基于axios发起的post请求

使用 axios 发起 POST 请求时,只需要将 method 属性的值设置为 'POST' ,URL地址改为 '/api/addbook':

1651146924088.png

1651146481917.png

接口相关的基础概念

使用 Ajax 请求数据时,被请求的 URL 地址,就叫做数据接口(简称:接口或 API 接口)。 同时,每个接口必须有对应的请求方式。例如:

www.itcbc.com:3006/api/getbook… 获取图书列表的接口(GET 请求) http://www. itcbc.com:3006/api/addbook 添加图书的接口(POST 请求)

接口文档的概念

接口文档就是接口的使用说明书,它是我们调用接口的依据。

备注:接口文档是后端程序员写的

组成部分说明
接口名称接口的名称,用来快速区分每个接口的作用。如:登录接口、添加图书接口
接口 URL客户端发起 Ajax 调用此接口时,请求的 URL 地址
请求方式接口的请求方式,如:GET、POST、PUT、DELETE 等
请求参数请求此接口时,需要发送到服务器的查询参数或请求体
返回示例当接口请求成功后,服务器响应回来的数据的基本格式
返回参数说明接口响应结果的详细描述

Ajax案例接口文档 docs.apipost.cn/preview/f62…

删除功能 delete请求

参照接口文档,发现删除图书,需要使用必填的id参数。 循环遍历数据时,将id值存储到 删除按钮的 自定义属性(data-id)中 单击 删除 按钮时,获取自定义属性data-id的值,这个值就是id

1651146510845.png

弹出框

1651146679674.png

put请求 修改图书

1651147012925.png

appkey

服务器存储的图书,分为通用数据和个人数据。 默认获取、添加、删除、修改的都是通用数据。 在获取、添加、删除、修改时,如果带appkey参数,则表示使用个人数据。

1651147080405.png

ajax错误修改

开发或学习时,难免会遇到错误。 遇到ajax方面的错误,该怎么排查呢? 答案: 浏览器的 network 面板。

有关Ajax方面的错误,不应只查看 “Console”面板,必须通过 “Network”面板进行排查

network面板查看请求状态(重要)

200 表示成功 pending 表示等待(可能网络不好或者断网了) 4xx 和 5xx 都表示不同程度的错误 Failed 表示失败

1651147299232.png

请求方式和完整的url(重要)

1651147655396.png

1651147669637.png

network工具查看服务器响应状态

1651147763394.png

遇到Ajax的错误,千万不要盯着 Console 面板看 一定要通过 network 面板排查错误以及找资料

form 表单 & 文件上传

什么是表单?

表单的三个组成部分

网页中采集数据的表单由三个部分组成,分别是:表单标签、表单域、表单按钮。

在网页中,表单主要负责数据采集功能。例如

1651150382862.png

1.表单的三个组成部分 - 表单标签

HTML 的

就是表单标签,它是一个“容器”,用来将页面上指定的区域划定为表单区域:

1651150461365.png1651150474546.png 2.表单的三个组成部分 - 表单域

表单域提供了采集用户信息的渠道,常见的表单域有:input、textarea、select 等

1651150514222.png

3.表单的三个组成部分 - 表单按钮

当表单数据填写完毕后,用户点击表单按钮,会触发表单的提交操作,从而把采集到的数据提交给服务器。

1651150565107.png

疑问:form 表单如何指定请求的 URL 地址和请求方式呢? 答案:需要用到 标签的 3 个专有属性了!

< form > 标签的属性一览表

< form > 标签最重要的 3 个属性分别是 action、method 和 enctype。简介信息如下表所示:

属性可选值说明
action接口的 url 地址把表单采集到的数据,提交到哪个接口中
methodGET 或 POST数据的提交方式(默认值为 GET)
enctypeapplication/x-www-form-urlencoded multipart/form-data text/plain(很少用)数据的编码格式。具体指的是:把表单数据提交给服务器之前,如何对将要提交的数据进行编码 (默认值 application/x-www-form-urlencoded)

注意:enctype 属性只能搭配 POST 提交方式一起使用;如果是 GET 提交,则 enctype 没有意义!

以get方式提交表单数据

在 标签上,通过 action 属性指定提交的 URL 地址,通过 method 属性指定提交的方式为 GET

1651151894243.png

注意:由于 method 属性的默认值就是 GET,因此上述的 method="GET" 可以被省略!

以post方式提交表单数据

在 标签上,通过 action 属性指定提交的 URL 地址,通过 method 属性指定提交的方式为 POST,并通过 enctype 属性指定数据的编码方式为 application/x-www-form-urlencoded:

1651151927011.png

注意:由于 enctype 的默认值就是 application/x-www-form-urlencoded,因此上述的 enctype 可以被省略!

表单提交的问题:

产生问题的原因:

表单身兼数职:既负责采集数据,又负责把数据提交到服务器!表单的默认提交行为会导致页面的跳转。

解决方案:

表单只负责采集数据; Ajax 负责将数据提交到服务器。(符合:职能单一的原则)

通过 Ajax 提交表单采集到的数据,可以防止表单默认提交行为导致的页面跳转问题,提高用户的体验。

1.监听表单的 submit 提交事件 2.阻止默认提交行为 3.基于 axios 发起请求 4.指定请求方式、请求地址 5.指定请求体数据

axios 请求方法的别名(简写)

在实际开发中,常用的 5 种请求方式分别是: GET、POST、PUT、PATCH、DELETE

为了简化开发者的使用过程,axios 为所有支持的请求方法提供了别名: axios.get(url[, config])

1651152396476.png

axios.delete(url[, config]) axios.post(url[, data[, config]])

1651152419433.png

axios.put(url[, data[, config]]) axios.patch(url[, data[, config]])

1651152347686.png

简写总结:

1651152452788.png

axios拦截器

很多功能 都需要和服务器 交互 发送网络请求

上传头像 网络很慢、上传的文件很大

整个页面 没有相应的 状态

发送请求的时候 都显示一个 加载中的友好提示

复杂项目来说, 几百个接口 - 几百个网络请求 如何方便优雅的实现

自己根据发送的请求来 显示加载中!!

1 html+css 来实现加载中

1 很多的ul框架 全部都会提供 加载中的 小小效果

2 自己来简单写一个加载中 即可

2 自己根据发送的请求来 显示加载中! axios内置的拦截器代码功能 在任意的请求

在发送请求前 拦截 处理一下 - 显示加载中

在数据响应来 拦截 处理一下 - 关闭加载中

普通人 想出去吉山

出去前 验证你核酸

回来后 验证你核算

1.添加请求拦截器

1651152683683.png

2.添加响应拦截器

1651152729525.png

3.发送网络请求

1651152746901.png

fontData

FormData 是一个浏览器对象。用于管理表单数据。

理解:

用于快速收集表单数据 并且可以将创建的FormData对象直接提交给接口。 典型应用场景:FormData + Ajax 技术实现文件上传的功能。

FormData 快速获取表单的数据:

1 forEach

URLSearchParams 数据转成 get传参数据格式

1 append()

2 toString()

假设需要收集 ……

里面的所有表单项的值 要求,每个表单元素都具有 name 属性

1651153198582.png

在提交数据前,可以使用下列API方法对数据进行查看和修改

1651153227096.png

文件上传

结合 FormData 实现头像上传

实现步骤:

1.主要的实现步骤: 2.使用文件选择器选择图片文件 3.把用户选择的文件存入 FormData 对象4.使用 axios 把 FormData 发送给服务器 5.模拟文件选择器的点击事件

1651153311658.png

1651153528851.png

图片上传服务器:

1651153594451.png

input标签的属性

文件域: accept 属性:控制能够选择的文件类型,比如 accept="image/png,image/jpeg" multiple 属性:控制是否可以多选文件

通俗的说,在 JavaScript 中,使用 文件对象 表示一个本地文件。 文件对象不需要自己创建,可以通过文件域获取得到 选择一个或多个文件 根据文件域,找到它的 files 属性。files属性是一个伪数组,里面包含了一个或多个文件对象

取得文件对象

1651153853632.png

文件对象作用之一

本地预览

1651153908698.png

文件对象的作用之二

追加到FormData,实现文件上传

1651153972405.png

请求报文 & 响应报文

什么是请求报文&响应报文

客户端与服务器通信的过程是基于请求与响应的。其中: 请求报文规定了客户端以什么格式把数据发送给服务器 响应报文规定了服务器以什么格式把数据响应给客户端

请求报文格式

请求报文由请求行(request line)、请求头部( header )、空行 和 请求体 4 个部分组成。图示如下

1651154047977.png

URL参数

在浏览器中,GET 请求比较特殊,它只有请求头,没有请求体。 在浏览器中,POST、PUT、PATCH、DELETE 请求既有请求头,又有请求体。

常用的5种请求方式,都可以在URL后面携带请求参数。 由于URL的长度有限制,所以请求参数一般都比较小,比如不能做文件上传 常用的请求参数有两种写法 /api/xxx?参数=值&参数=值 (这种格式的字符串叫做查询字符串,所以这样的参数叫做查询参数) /api/xxx/值/值 (Restful 风格的接口用这种格式的参数

axios中 如何携带不同格式的请求参数

第一种格式的参数:(/api/xxx?参数=值&参数=值)

1651154216962.png

第二种格式的参数:( /api/xxx/值/值)

1651154238131.png

请求体

1.除GET请求以外,其他4种常用的请求方式,都可以设置请求体。

参数=值&参数=值 (查询字符串格式)

1651154318852.png

2.请求体的大小没有限制,所以可以提交大量的数据

'{ "id": 1, "name": "zs" }' (JSON格式)

1651154332191.png

3.常用的请求体格式有如下三种:

new FormData() (FormData对象格式)

1651154349690.png

请求的时候,设置了不同格式的请求体,需要一个对应的请求头

1651154446160.png

响应报文

http 响应状态码

概念:http 响应状态码(Status Code)由三位数字组成,用来标识响应成功与否的状态。 作用:客户端浏览器根据响应状态码,即可判断出这次 http 请求是成功还是失败了

1651154501458.png

状态码状态码描述说明
200OK请求成功。
201Created资源在服务器端已成功创建。
304Not Modified资源在客户端被缓存,响应体中不包含任何资源内容!
400Bad Request客户端的请求方式、或请求参数有误导致的请求失败!
401Unauthorized客户端的用户身份认证未通过,导致的此次请求失败!
404Not Found客户端请求的资源地址错误,导致服务器无法找到资源!
500Internal Server Error服务器内部错误,导致的本次请求失败!

http 响应状态码 Vs 业务状态码

  1. 所处的位置不同: 在响应头的状态行中所包含的状态码,或者请求列表中的Status,叫做“响应状态码”

1651154626495.png

在响应体的数据中所包含的状态码(案例中叫做code),叫做“业务状态码”

1651154644259.png

  1. 表示的结果不同: 响应状态码只能表示这次请求的成功与否(成功地失败了) 业务状态码用来表示这次业务处理的成功与否
  2. 通用性不同: 响应状态码是由 http 协议规定的,具有通用性。每个不同的状态码都有其标准的含义,不能乱用。 业务状态码是后端程序员自定义的,不具有通用性

1651154655724.png