Axios库-form 标签的属性,axios请求方法别名,axios拦截器使用,文件上传FormData的基本用法

AjaxDay02

学习目标

1.掌握 Ajax 提交表单数据的用法
能够在实际项目开发中通过 axios 提交表单的数据

2.掌握 axios 拦截器的用法
能够在开发中运用拦截器展示和隐藏 loading 效果

3.掌握 FormData 的使用
能够使用 FormData 结合 axios 实现文件上传功能

form表单

表单是什么?

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

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

在这里插入图片描述

表单域

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

在这里插入图片描述

注意:每个表单域必须包含 name 属性,否则用户填写的信息无法被采集到!

表单按钮

在这里插入图片描述

注意:
①type=“submit” 表示提交按钮的意思
②type 属性的默认值就是 submit,因此 type=“submit” 可以省略不写

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 没有意义!

enctype三个可选值之间的区别
属性值是否常用应用场景
application/x-www-form-urlencoded表单中不包含文件上传的场景,适用于普通数据的提交
multipart/form-data表单中包含上传文件的场景
text/plain

由于form表单的内部button按钮自带提交功能,页面会跳转到form表单中action属性定义的地址,但真正开发中用户无法停留在当前的页面,导致体验很差,往往不需要默认跳转页面,这时应禁止form表单页面的跳转

使用**e.preventdefault()**方法禁止form表单的默认跳转

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

$('#formLogin').on('submit', function (e) {
  e.preventDefault()
  axios({
    method: 'POST',
    url: 'http://www.liulongbin.top:3009/api/form',
    data: {
      username: $('[name="username"]').val(),
      password: $('[name="password"]').val()
    }
  }).then(({ data: res }) => {
    console.log(res)
  })
})
jQuery 的 serialize() 函数

jQuery 的 serialize() 函数能够一次性获取到表单中采集的数据,它的语法格式如下:

注意表单域中表单元素name属性一定要赋值否则无法通过该方法依次性获取提交的表单数据,且要配合表单的submit事件一起使用,

在这里插入图片描述

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.get() 的用法

在这里插入图片描述

体验 axios.post() 的用法

在这里插入图片描述

全局配置请求根路径

在 url 地址中,协议://域名:端口 对应的部分叫做“请求根路径”。
全局配置请求根路径的好处:提高项目的可维护性。

基于 axios 提供的固定配置,即可轻松配置请求的根路径。语法格式如下:
axios.defaults.baseURL = '请求根路径’

在这里插入图片描述

axios拦截器

axios.interceptors设置axios拦截器

// 增加请求拦截器
axios.interceptors.request.use(function (config) {
    // 发送请求前要做的操作
  	//...
    return config;
  }, function (error) {
    // 发送错误要做的操作
  	//...
    return Promise.reject(error);
  });

// 增加响应拦截器
axios.interceptors.response.use(function (response) {
    // Any status code that lie within the range of 2xx cause this function to trigger
    // 收到响应后要做的操作
  	//...
    return response;
  }, function (error) {
    // Any status codes that falls outside the range of 2xx cause this function to trigger
    // 响应错误要做的操作
  	//...
    return Promise.reject(error);
  });

文件上传

FormData的基本用法

FormData.forEach()方法

FormData 是一个构造函数,new FormData() 即可得到 FormData 对象:
const fd = new FormData() // 创建一个空白的 FormData 对象,里面没有包含任何数据。
const fd = new FormData(表单对象)可以获得存入表单数据的formdata的二进制对象

 fd.forEach(function (value, key) {
        console.log(value, key)
      })//可以取出表单数据
FormData.append()方法
		document.querySelector('button').onclick = function () {
      	//formdata方法 append() 可添加数据
      	let fd = new FormData() //得到一个空的二进制FormDatat实例
      	fd.append('uname', 'jack')
      	fd.append('age', 18)
        fd.append('avatar', 图片文件) 
				axios.post('http://www.liulongbin.top:3009/api/formdata', fd).then((res) => {
   	 		console.log(res);
  })
}
~~~
头像上传案例
<!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>案例-头像上传</title>
  <link rel="stylesheet" href="./lib/bootstrap-v4.6.0.css">
  <style>
    .thumb-box {
      text-align: center;
      margin-top: 50px;
    }

    .thumb {
      width: 250px;
      height: 250px;
      object-fit: cover;
      border-radius: 50%;
    }
  </style>
</head>

<body>
  <div class="thumb-box">
    <!-- 头像 -->
    <img src="./images/cover.jpg" class="img-thumbnail thumb" alt="">
    <div class="mt-2">
      <!-- 文件选择框 -->
      <!-- accept 属性表示可选择的文件类型 -->
      <!-- image/* 表示只允许选择图片类型的文件 -->
      <input type="file" id="iptFile" accept="image/*" style="display: none;">
      <!-- 选择头像图片的按钮 -->
      <button class="btn btn-primary" id="btnChoose">选择 & 上传图片</button>
    </div>
  </div>

  <script src="./lib/jquery-v3.6.0.js"></script>
  <script src="./lib/axios.js"></script>
  <script>
    //点击文件上传,上传头像
    $('#iptFile').on('change', function (e) {
      //获取图片对象
      let files = e.target.files
      //如果文件列表长度为0,则不作操作
      if (files === 0) return
      //将图片对象转换为二进制对象
      let fd = new FormData()
      fd.append('avatar', files[0])
      //axios将装有图片文件的二进制对象发送服务器,返回服务器存放图片文件的地址
      axios.post('http://www.liulongbin.top:3009/api/upload/avatar', fd).then(({
        data: res
      }) => {
        console.log(res);
        if (res.code === 200) {
          $('.thumb-box .thumb').prop('src', 'http://www.liulongbin.top:3009' + res.url)
        }
      })
    })

    //点击button按钮事件
    $('#btnChoose').click(
      function () {
        $('#iptFile').click()
      }
    )
  </script>
</body>

</html>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值