axios与form的关系

117 阅读6分钟

form 表单

表单的三个组成部分

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

表单标签

HTML 的

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

表单域

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

表单按钮

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

form表单的作用是 采集数据

< form > 标签最重要的 3 个属性分别是 action、method 和 enctype

属性可选值说明
action接口的 url 地址把表单采集到的数据,提交到哪个接口中
methodGET 或 POST数据的提交方式(默认值为 GET)

| enctype | application/x-www-form-urlencoded/multipart/form-data text/plain(很少用) | 数据的编码格式。具体指的是: 把表单数据提交给服务器之前,如何对将要提交的数据进行编码 (默认值 application/x-www-form-urlencoded) |

表单提交的问题

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

解决方案:

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

通过 Ajax 提交表单数据

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

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

axios 请求方法的别名

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

为了简化开发者的使用过程,axios 为所有支持的请求方法提供了别名:

  • axios.get(url[, config])
  • axios.delete(url[, config])
  • axios.post(url[, data[, config]])
  • axios.put(url[, data[, config]])
  • axios.patch(url[, data[, config]])

axios 全局配置 和 拦截器

在 url 地址中,协议://域名:端口 对应的部分叫做“请求根路径”。

全局配置请求根路径的好处:

  • 提高项目的可维护性。全局配置根路径后,后续所有的请求都可以使用全局配置的根路径

假设:端口号从 3009 变成了 3006

  • 没有全局配置根路径,则每个请求的URL中的端口号都需要被修改!
  • 有全局配置根路径,则只需要修改全局配置即可

axios 全局配置 & 拦截器

全局配置

axios.defaults.baseURL = '请求根路径'

拦截器

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    return config;
  }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  });
​
// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    return response;
  }, function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
  });

拦截器(interceptors) 用来全局拦截 axios 的每一次请求与响应。 好处:可以把每个请求中,某些重复性的业务代码封装到拦截器中,提高代码的复用性。

FormData和文件上传

FormData 介绍

  1. FormData 是一个浏览器对象。用于管理表单数据。
  2. IE10+支持。
  3. 可以这样理解,FormData的作用和 jQuery中的 serialize() 作用一样,用
  4. 快速收集表单数据
  5. 并且可以将创建的FormData对象直接提交给接口。
  6. 典型应用场景:FormData + Ajax 技术实现文件上传的功能。

FormData基本使用方法

  • 假设需要收集 ……
  • 里面的所有表单项的值
  • 要求,每个表单元素都具有 name 属性

## 文件域补充

input标签的属性

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

文件对象

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

请求报文 & 响应报文

客户端与服务器通信的过程是基于请求与响应的。

其中:

  • 请求报文规定了客户端以什么格式把数据发送给服务器
  • 响应报文规定了服务器以什么格式把数据响应给客户端

请求报文 - 格式

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

注意:

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

URL参数

  • 常用的5种请求方式,都可以在URL后面携带请求参数。

  • 由于URL的长度有限制,所以请求参数一般都比较小,比如不能做文件上传

  • 常用的请求参数有两种写法

    • /api/xxx?参数=值&参数=值 (这种格式的字符串叫做查询字符串
    • 以这样的参数叫做查询参数) /api/xxx/值/值 (Restful 风格的接口用这种格式的参数)

请求体

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

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

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

    • 参数=值&参数=值 (查询字符串格式)
    • '{ "id": 1, "name": "zs" }' (JSON格式)
    • new FormData() (FormData对象格式)

常见的 http 响应状态码

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

\