Ajax加强(axios知识总结、form 表单和按钮)

241 阅读4分钟

“携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第20天,点击查看活动详情

⭐️Ajax加强

axios

是前端圈最火、专注于请求数据的库

中文官网地址

英文官网地址

axios 发送 get 请求 携带参数

    1. ⭐️直接在 URL 上拼接 即可

    •  // ?  前面部分是正常的url
        // ? 后面的参数部分   a=1&b=2
      
    1. 在 ⭐️params 对象中携带 本质也是 帮我们将对象 转成了字符串,然后拼接在 url 上

    •  axios({
       url: 'http://www.itcbc.com:3006/api/getbooks',
       method: 'GET',
       params: {
         bookname: '斗破苍穹134',
         author: '土豆',
       },
       }).then((result) => {
       console.log(result);
       });
      
  • 增加一列 删除

    • 给删除按钮绑定事件(异步 没有办法获取到 dom 元素)

      • 解决:事件委托
      • 找一个 删除按钮的父元素(一直存在网页中 不是动态生成
      • 用ID删除,在删除生成是给他加一个 data-id
      • 用 axios 的.then 里面的回调函数更新渲染页面
  • 确认框

    • if(confrim('您...'))

axios 发送 post 请求 携带参数

  • ⭐️data:{obj}

    •  axios({
           url: 'http://www.itcbc.com:3006/api/addbook',
           method: 'POST',
           data: {
           bookname: 'yeah',
           author: 'wendy',
           publisher: 'meizi',
           appkey: 'sdfr34343',
           }
           }).then(result => {
           console.log(result);
       })
      
  • ⭐️data:bookname=21&author=211&publisher=111

    •  axios({
           url: 'http://www.itcbc.com:3006/api/addbook',
           method: 'POST',
           data: a=2&b=1
           }).then(result => {
           console.log(result);
       })
      
  • 和服务器通信 ajax

    • get

      • 获取信息
      •  axios.get('http://www.itcbc.com:3006/api/getbooks').then((result)=>{
             console.log(result);
         })
        
      •  axios.get('http://www.itcbc.com:3006/api/getbooks',{params:{appkey:'bbccddaaa'},}).then((result)=>{
             console.log(result);
         })
        

      post

      • 发送信息给 服务器

      •  axios({
             url: 'http://www.itcbc.com:3006/api/addbook',
             method: 'POST',
             data: {
             bookname: 'yeah',
             author: 'wendy',
             publisher: 'meizi',
             appkey: 'sdfr34343',
             }
             }).then(result => {
             console.log(result);
         })
        
      • 简写 axios.post('url',参数对象)

         axios.post('http://www.itcbc.com:3006/api/addbook',{
             bookname: '演示ttt',
             author: '我自己你不知道ttt',
             publisher: '斑马出版社ttt',
             // 改为只有自己知道的key 长度 6-20
             appkey: 'bbccddaaa',
         }).then((result)=>{
             console.log(result)
         })
        
      • post-data-字符串格式数据

         1.data:{obj}
         // data:{
         //     bookname:'b1',
         // }
         2. data:字符串格式数据
         data: 'bookname=b1&author=wendy&publisher=meizi&appkey=bbccddaaa',
        
    • delete

      • 删除数据
  • put

    • 修改数据

         axios({
             url: 'http://www.itcbc.com:3006/api/delbook',
             method: 'DELETE',
             params: {
             appkey: 'bbccddaaa',
             id,
             }
             }).then(result => {
             render();
         })
      
  • patch

请求方式携带参数写在 data 还是 params

  • 看文档

    • Query 参数 url 上或者 params 上
    • body 参数 data
  • 默认

    • 1 get 请求 url 或者 params

    • 2 post 请求 data

    • 3 delete 、put、patch 结合文段来看

      • delete 和 get 相似
      • put patch post 类似
  • 试试

form 表单和按钮

  • 默认刷新

  • 设置不刷新

    • e.preventDefault()
  • 获取数据

    • $('form').serialize()

    •  form.addEventListener('submit', function (e) {
           e.preventDefault()
           const query = $('form').serialize();
           console.log(query);
       });
      
    • 原生js获取

       const form = document.querySelector('form')
       form.addEventListener('submit', function (e) {
           e.preventDefault()
           const fd = new FormData(this) // this = form dom 
           const usp = new URLSearchParams(fd)
           const query = usp.toString()
           console.log(query);
       })
      
  • 表单重置

    • $('form').reset()
  • 取消自动填充

    • <form autocomplete="off">
  • 表单隐藏域

    • <input type="hidden">
  • 点击,表单重置

    • <button type="reset" class="btn btn-primary">取消</button>
  • 得到用户想要编辑的一行数据

    •  for (const key in editOldData[0]) {
           document.querySelector(`input[name=${key}]`).value = editOldData[0][key]
       }
      

⭐️FormData对象

构造对象 可以 new 一个实例,可以存放一些数据的实例 (不像普通的 obj),调用方法 append(key,value) 添加数据

作用:

1 文件上传

 // 1 写一个 input 标签 type = file
 <input type="file">
 <img src="" alt="">
 <script src="./lib/axios.js"></script>
 <script src="./js/common.js"></script>
 <script>
     const ipt = document.querySelector('input')
 ​
     // 2 给 input 标签绑定 change 事件
     ipt.addEventListener('change', () => {
 ​
     // 3 通过 input.files 来获取到上传的文件数组
         const files = ipt.files
 ​
     // 4 可选,直接把文件显示在前端页面
         console.log(files[0]); // obj
         const fd = new FormData()
 ​
     // 5 使用 formdata 对象来包装(添加) 选好的 文件
         fd.append('avatar', files[0])
 ​
     // 6 使用 axios 携带参数 formdata 对象 来完成文件的上传
         axios({
             method: 'POST',
             url: '/api/formdata',
             data: fd
         }).then(res => document.querySelector('img').src = res.data.data.filename)
 ​
     })
 ​
     // 4 可选,直接把文件显示在前端页面 不经过后端
     const src = URL.createObjectURL(file)
     document.querySelector('img').src = src
     
 </script>

2 配合URLSearchParams 对象获取存 formdata 中的表单数据

 const form = document.querySelector('form')
 form.addEventListener('submit', (e) => {
     e.preventDefault()
     const fd = new FormData(form)
     const usp = new URLSearchParams(fd)
     console.log(usp);
 })
  • 不能直接打印 FormData 看数据

    • 通过 foreach 方法来 遍历 挨个查看数据
     const fd = new FormData()
     fd.append('username', 'wendy')
     for (let i = 0; i < 10; i++) {
         fd.append('username', `wendy${i}`)
     }
     fd.forEach((value, key, all) => {
         console.log("你要查看的属性名是", key, "属性值是", value, 'all:', all);
     })
    

URLSearchParams 对象

  • 构造函数,存 formdata 中的表单数据
  • 该对象有 tostring 方法,可以专门把数据转成 字符串参数形式

axios 基地址

提高程序的可维护性

 axios.defaults.baseURL  = 'http://www.itcbc.com:3006';
 ​
 axios.get('/api/getbooks',{
     params:{appkey:'bbccddaaa'},
 }).then((result)=>{
     console.log(result);
 })

拦截器

拦截器(interceptors)用来全局拦截 axios 的每一次请求与响应。

好处:

  • 可以把每个请求中,某些重复性的业务代码封装到拦截器中,提高代码的复用性。

URL.createObjectURL

  • URL.createObjectURL(你想要获取谁的内存地址) 返回 内存中的 文件地址

API

  • 应用程序接口 服务对外提供的能力

    • ajax

      • 提供数据的 API
    • webAPI

      • 浏览器针对 js语法 提供的一套服务

        • js 语法 for 数组 对象 、 ++ --
      •  let  num =10; //  js语法能力
         document.querySelector("div").innertHTML = num ;
        
    • formData

      • 操作 网页 标签能力
      • 快速获取 form 标签中数据的能力,浏览器的设置让你 formDate 去读数据

ajax原生请求

  • get

    • 1 创建 xhr 实例

    • 2 调用 open 方法(指定请求类型,指定请求的 url)

      • url 为字符串数据型
    • 3 开始发起请求

    • 4 监听 数据响应

  • post

    • post 请求 传递的参数

      • 1 只能放在 send 中

      • 2 传递的参数的格式 3种格式

        • 2.1 字符串形式

          • a=1&b=2&c=3 告诉后端(请求头 ) 我传递的数据是格式1

          • send 直接发送 usp 数据

            • 请求头: xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded')
        • 2.2 json 形式

          • { a:1,b:2} 告诉后端(请求头 ) 我传递的数据是格式2

          • xhr.setRequestHeader('content-type', 'application/json')

            xhr.send(JSON.stringify(data))

        • 2.3 FormData格式

          • 告诉后端(请求头 ) 我传递的数据是格式3