• [JavaScript][AJAX] axios框架 ,页面跳转传参,DOM驱动,数据驱动渲染页面,tab切换,网络请求loading动画


    目录

    axios框架

    axios基本语法

    axios推荐使用方式

    axios注意点:

     js中分号作用

    页面跳转传参

    DOM驱动渲染页面

    数据驱动渲染页面

    tab切换

    网络请求loading动画


    axios框架

    Axios 是一个基于 promise 的网络请求库,可以用于浏览器和 node.js

    axios基本语法

          axios基本语法

         1.基本语法 : axios.get('url' ) .then( res=>{} ).catch( err=>{} )

          1.1 get请求: axios.get('url , {params:{ 属性名:属性值 }}). then(res=>{})

          1.2 post请求: axios.post('url', { 属性名:属性值 } ). then( res=> {} )

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8" />
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    7. <title>Document</title>
    8. <style>
    9. .box {
    10. height: 200px;
    11. width: 800px;
    12. font-size: 20px;
    13. font-weight: 700;
    14. margin: 20px auto;
    15. }
    16. </style>
    17. </head>
    18. <body>
    19. <button class="btn1">基本使用</button>
    20. <button class="btn2">点我发送get请求</button>
    21. <button class="btn3">点我发送post请求</button>
    22. <div class="box"></div>
    23. <!-- 引入 -->
    24. <script src="./axios.js"></script>
    25. <script>
    26. /*
    27. axios基本语法
    28. 1.基本语法 : axios.get('url' ) .then( res=>{} ).catch( err=>{} )
    29. 1.1 get请求: axios.get'url , {params:{ 属性名:属性值 }}). then(res=>{})
    30. 1.2 post请求: axios.post('url', { 属性名:属性值 } ). then( res=> {} )
    31. 3.axios注意点:res对象并不是服务器响应的原始数据,而是axios自己额外包的数据
    32. res.config:请求配置
    33. res.data:服务器真正响应的数据
    34. */
    35. document.querySelector('.btn1').addEventListener('click', function () {
    36. axios.get('https://autumnfish.cn/api/joke/list?num=10')
    37. // .then代替onload
    38. .then(res => console.log(res))
    39. .catch(err => console.log(err))
    40. })
    41. document.querySelector('.btn2').addEventListener('click', function () {
    42. axios.get('https://autumnfish.cn/api/joke/list', {
    43. // 参数
    44. params: { num: 10 }
    45. }).then(res => {
    46. console.log(res);
    47. document.querySelector('.box').innerHTML = res.data.data
    48. })
    49. })
    50. document.querySelector('.btn3').addEventListener('click', function () {
    51. axios.post('http://ajax-base-api-t.itheima.net/api/login', { username: 'admin', password: '123456' }).then(res => {
    52. console.log(res)
    53. alert(res.data.msg)
    54. })
    55. })

    axios推荐使用方式

    💎推荐语法:

        axios({

          method:'请求方法',

          url:'请求路径',

          params:{get参数},

          data:{post参数}

        })

    💎注意:params传get方法参数,data传post参数,不要错用,错用无效

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8" />
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    7. <title>Document</title>
    8. <style>
    9. .box {
    10. height: 200px;
    11. width: 800px;
    12. font-size: 20px;
    13. font-weight: 700;
    14. margin: 20px auto;
    15. }
    16. </style>
    17. </head>
    18. <body>
    19. <button class="btn1">基本使用</button>
    20. <button class="btn2">点我发送get请求</button>
    21. <button class="btn3">点我发送post请求</button>
    22. <div class="box"></div>
    23. <!-- 引入 -->
    24. <script src="./axios.js"></script>
    25. <script>
    26. document.querySelector('.btn1').addEventListener('click', function () {
    27. axios({
    28. url: 'https://autumnfish.cn/api/joke/list',
    29. method: 'get',
    30. params: { num: 10 },
    31. }).then(res => console.log(res))
    32. })
    33. document.querySelector('.btn3').addEventListener('click', function () {
    34. axios({
    35. url: 'http://ajax-base-api-t.itheima.net/api/login',
    36. method: 'post',
    37. data: { username: 'admin', password: '123456' }
    38. }).then(res => {
    39. console.log(res);
    40. alert(res.data.msg)
    41. location.href = 'https://blog.csdn.net/wusandaofwy?spm=1000.2115.3001.5343'
    42. })
    43. })
    44. </script>
    45. </body>
    46. </html>

    axios注意点:

    res对象并不是服务器响应的原始数据,而是axios自己额外包的数据

    res.config:请求配置

    res.data:服务器真正响应的数据

     js中分号作用

        // js中分号作用:语句结束符

            // 如果不加分号,js会往下嗅探

            let res = 1 +

                123

            console.log(res);//124

            💎 自调用函数(立即执行函数)前一定要加分号

            ; (function () {

                console.log('222')

            })()

            💎数组前一定要加分号

            ;[1,2,3,4].join('')

    🏆否则都会报错

    页面跳转传参

    需求:在index页,点击查看详情使用url实现页面跳转传参

    实现:

    1.在index页给button增加onclick事件挑转到detail页,同时传参数过去

    2.在detail页对传入参数处理获取id

     // 🏆 通过对location.search获取参数信息,是一个字符串,对字符串用=进行分割成一个数组,获取数组下标为1的元素就是传过来的id

        let id = location.search.split('=')[1]

    3.得到id后通过axios请求数据

    1. axios({
    2. url: `https://autumnfish.cn/fruitApi/fruit/${id}`,
    3. method: 'get',
    4. }).then(res => {
    5. const { data: { data } } = res
    6. console.log(data);
    7. render(data)
    8. })

    DOM驱动渲染页面

    DOM驱动渲染页面是通过document.createElement()创建子元素,然后把子元素插入父元素

    父元素.appendChild(子元素)(或者insertBefore(子元素,插入某某元素前))

    1. let newLi = document.createElement('li')
    2. newLi.className = 'right_word'
    3. newLi.innerHTML = `<img src="img/person02.png" />
    4. <span>${text.value}</span>`
    5. list.appendChild(newLi)

    数据驱动渲染页面

    数据驱动渲染页面;

    1.声明一个全局数组存贮变量

    2,把数据增加进数组(push(),unshift())

    3.通过数据的map()和join()方法配合使用,渲染界面

    父元素.innerHtml=数组.map(item=>`返回的新数组元素`).join('')

    1. <script>
    2. /*
    3. 使用数据驱动思路
    4. 1.声明一个全局数组存储聊天内容
    5. 2.点击发送
    6. 2.1 非空判断
    7. 2.2 将自己的聊天内容添加到数组中
    8. 2.3 ajax发送请求,获取机器人回复内容添加到数组中
    9. 2.4 文本清空
    10. */
    11. let arr = []
    12. // 文本框
    13. const text = document.querySelector('.input_txt')
    14. // 按钮对象
    15. const sub = document.querySelector('.input_sub')
    16. sub.addEventListener('click', function () {
    17. if (!text.value) {
    18. text.value = ''
    19. return alert('输入内容不能为空!!!!')
    20. }
    21. // 自己写的内容录入数组
    22. arr.push({
    23. text: text.value,
    24. isMe: true
    25. })
    26. console.log(arr);
    27. // 2.4 文本清空
    28. text.value = ''
    29. render(arr)
    30. // 请求机器人
    31. axios({
    32. url: 'http://ajax-base-api-t.itheima.net/api/robot',
    33. method: 'get',
    34. params: { spoken: text }
    35. }).then(({ data: { data: { info } } }) => {
    36. //成功回调
    37. const txt = info.text
    38. console.log(txt)
    39. // 机器人回应文字放入数组
    40. arr.push({
    41. text: txt,
    42. isMe: false,
    43. })
    44. console.log(arr)
    45. render(arr)
    46. })
    47. })
    48. // 封装渲染函数
    49. function render(data) {
    50. document.querySelector('.talk_list').innerHTML = data
    51. .map(item => item.isMe ? `
    52. <li class="right_word">
    53. <img src="img/person02.png" />
    54. <span>${item.text}</span>
    55. </li>
    56. `: `
    57. <li class="left_word">
    58. <img src="img/person01.png" />
    59. <span>${item.text}</span>
    60. </li>
    61. `)
    62. .join('')
    63. resetui()
    64. }
    65. </script>

    tab切换

            // 去除active

            document.querySelector('.nav ul li.active').classList.remove('active')

            // 增加active

            item.classList.add('active')

    网络请求loading动画

     🏆网络请求loading动画思路

          原理: gif动图

          显示: ajax发送请求之前

          隐藏:  ajax响应之后

    1. // 💎显示loading动图
    2. document.querySelector('.cover').style.display = ' block'
    3. axios({
    4. url: 'https://autumnfish.cn/api/cq/category',
    5. method: 'get',
    6. params: { type }
    7. }).then(res => {
    8. //成功回调
    9. // 💎隐藏loading动图
    10. document.querySelector('.cover').style.display = ' none'
    11. renderData(res.data.data.heros)
    12. })

  • 相关阅读:
    GET 和 POST 到底有什么区别?
    MySQL——锁
    .360勒索病毒和.halo勒索病毒数据恢复|金蝶、用友、ERP等数据恢复
    干货︱部分领域数字孪生白皮书及报告汇总(附下载)
    JavaScript学习笔记(一)
    你以为Shell只是命令行?读懂这篇文,给你的工作赋能
    open-webui与ollama的部署最后完整之命令
    Linux 利用 /proc 目录恢复误删除的文件
    yum、apt-get、curl、wget和pip的使用范围
    服务器连接校园网
  • 原文地址:https://blog.csdn.net/wusandaofwy/article/details/126531230