06.Ajax基础知识总结

166 阅读8分钟

1.服务器相关的基础概念

1-1 服务器

  • 服务器的本质

    • 也是一台电脑
  • 服务器的作用

    • 存储网站的文件
    • 提供网站的文件给用户
  • 如何获得服务器

    • 购买(京东)
    • 租赁(阿里云、腾讯云)

1-2 资源

  • 服务器上的 网页(html文件)、图片、音乐、视频、字体文件、CSS文件、JS文件等等都称之为资源。所以资源代指服务器上存储的内容
  • 数据也是资源

1-3 客户端

概念

在前端开发中,客户端特指web浏览器

作用

将互联网世界中的web资源加载、并呈现到浏览器窗口中供用户使用

常用的客户端浏览器

1650868257762

1-4 URL 地址

1650882508750

1-5 客户端与服务器通信的过程

  • 请求的概念:客户端通过网络去找服务器要资源的过程,叫做“请求”

  • 响应的概念:服务器把资源通过网络发送给客户端的过程,叫做“响应”

1-6 Ajax概念

  • Ajax 是浏览器中的技术:用来实现客户端网页请求服务器的数据。

  • 它的英文全称是 Asynchronous Javascript And XML,简称 Ajax。

2 请求方式

1650882764472

2-1 GET请求

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

2-2 POST请求

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

2-3 DELETE请求

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

2-4 PUT请求

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

2-5 PATCH请求

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

3 Ajax基本用法

3-1 axios 的基础语法

axios(发音:艾克C奥斯) 是前端圈最火的、专注于数据请求的库

中文官网地址:www.axios-http.cn/

1650883076951

3-2 基于 axios发起 GET 请求

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

1650883193548

GET 请求的查询参数

1650883240191

在 GET 请求中携带多个查询参数

如果要携带多个参数,只需要在 params 对象中指定多个查询参数项即可。示例代码如下:

1650883291282

案例图书管理

1650945296051

基于axios发起post请求

使用小时发起post请求时post时,只需要method属性的值设置为post,url地址改为 '/api/addbook'

1651148636333

POST 案例:添加图书 核心代码

请求方式为 POST,请求地址为 www.itcbc.com:3006/api/addbook

1651148710761

4 接口相关的基本概念

概念

使用 Ajax 请求数据时,被请求的 URL 地址,就叫做数据接口(简称:接口或 API 接口)。

同时,每个接口必须有对应的请求方式

接口文档的格式

1651148858621

5 案例-图书管理

查询数据

        // 调用数据
        getData()
        // 渲染数据
        function getData() {
            // 查询数据
            axios({
                method: 'get',
                url: 'http://www.itcbc.com:3006/api/getbooks'
            }).then(result => {
                // console.log(result);
                arr = result.data.data
                let html = ``
                arr.forEach((value, index) => {
                    html += `
                <tr>
                    <td>${value.id}</td>
                    <td>${value.bookname}</td>
                    <td>${value.author}</td>
                    <td>${value.publisher}</td>
                    <td>
                        <a href="javascript:;" class="del" data-id="${value.id}">删除</a>
                        <a href="javascript:;" class="edit" data-index="${index}">编辑</a>
                    </td>
                </tr>
                `
                });
                tbody.innerHTML = html
            })
        }

添加数据

        // 添加数据 
        add.addEventListener('click', function () {
            console.log(123);
            // 添加数据
            axios({
                method: 'post',
                url: 'http://www.itcbc.com:3006/api/addbook',
                data: {
                    bookname: booknameDom.value,
                    author: authorDom.value,
                    publisher: publisherDom.value
                }
            }).then(result => {
                console.log(result);

                // 添加后输入框清空
                booknameDom.value=''
                authorDom.value=''
                publisherDom.value=''
                // 重新渲染数据 
                getData()
            })
        })

删除数据

        // 删除数据 编辑数据
  tbody.addEventListener('click',function(event){
            // // 删除确认框
            // if(!confirm('你确定要删除数据么')){
            //     return
            // }
            // 删除数据
            if(event.target.className==='del'){
                console.log(123);
                const {id} = event.target.dataset
                axios({
                    method:'delete',
   url:'http://www.itcbc.com:3006/api/delbook',
                    params:{id}
                }).then(result=>{
                    getData()
                })
            }

修改数据

        // 编辑数据 提交数据
        editbtn.addEventListener('click',function(){
            const data={
                bookname:booknameDom.value,
                author:authorDom.value,
                publisher:publisherDom.value,
                id:id
            }
            axios({            url:'http://www.itcbc.com:3006/api/updatebook',
                method:'put',
                data
            }).then(result=>{
                getData()
                booknameDom.value = ''
                authorDom.value = ''
                publisherDom.value = ''
            })
        })

appkey身份认证

服务器存储的图书,分为通用数据和个人数据

  • 默认获取、添加、删除、修改的都是通用数据
  • 在获取、添加、删除、修改时,如果带appkey参数,则表示使用个人数据。

1651149499966

6 network面板

介绍

  • lnetwork,翻译为 “网络”

  • l浏览器的开发者工具中,有一个面板为 network。(新版的chrome浏览器是中文版本的)

  • l该工具可以抓取到所有的网络请求,当然包括ajax请求

  • l我们可以使用该工具,查看当前Ajax请求的详细信息

    • l查看请求方式
    • l查看请求的URL地址
    • l查看请求参数
    • l查看响应结果

使用

1

1651149749866

2 隐藏时间轴。初学阶段,用不到时间轴,可以将其隐藏,从而节省面板的空间

1651149768226

3 禁用浏览器缓存

1651149787325

4 模拟网络(网速)

1651149802072

5 显示请求方式

1651149820577

6 network****面板 查看 请求状态

1651149846682

7 network面板 查看请求方式和完整URL

1651149933344

8 network****面板 查看 传输到服务器的数据

1651149953836

9 network****面板 查看 服务器响应结果

1651149985261

7 form表单

作用

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

表单组成部分

  • 表单标签 表单域 按钮表单
表单标签

HTML 的

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

1651150356748

表单域

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

1651150387687

表单按钮

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

1651150444836

form标签属性

1651150503425

表单文件上传

get方式提交表单数据

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

1651150627434

POST 方式提交表单数据

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

1651150684726

通过 Ajax 提交表单数据

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

①监听表单的 submit 提交事件

②阻止默认提交行为

③基于 axios 发起请求

④指定请求方式、请求地址

⑤指定请求体数据

1651150778035

jQuery serialize**()** 函数

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

$('表单元素的选择器').serialize();

1651150838931

serialize() 函数的使用注意点

在使用 serialize() 函数快速获取表单数据时,必须为每个表单域添加 name 属性!

例如下面的示例中,只能通过 serialize() 函数获取到密码的值:

1651403183107

serialize() 函数的其他特点

该方法是jQuery封装的,使用时必须引入jQuery

使用serialize(),各表单域必须有 name 属性

使用该方法得到的结果是一个查询字符串结构:name=value&name=value

该方法 能够 获取 隐藏域的值

该方法不能得到禁用状态的值

该方法不能得到文件域中的文件信息,所以不能完成文件上传

8 axios请求方法的别名

1651403317533

9 axios全局配置和拦截器

全局配置请求根路径 - 语法格式

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

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

1651403444480

拦截器

  • 用来全局拦截 axios 的每一次请求与响应

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

axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    document.querySelector(".vir-wrap").style.display = "flex";
    return config;
  }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  });

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    document.querySelector(".vir-wrap").style.display = "none";
    return response;
  }, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
  });

10 FormData和文件上传

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

  • IE10+支持。

  • 可以这样理解,FormData的作用和 jQuery中的 serialize() 作用一样,用于快速收集表单数据

  • 并且可以将创建的FormData对象直接提交给接口。

  • 典型应用场景:FormData技术实现的功能

1651403663770

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

1651403686411

FormData和serialize的区别

  • 共同点:

    • 都需要设置表单各项的name属性。
    • 都能快速收集表单数据
    • 都能够获取到隐藏域()的值
    • 都不能获取禁用状态(disabled)的值
  • 不同点:

    • FormData属于原生的代码;serialiaze是jQuery封装的方法
    • FormData可以收集文件域()的值,而serialize不能。如果有文件上传,则必须使用FormData。
    • 得到的结果的数据类型不一样(知道即可

11 文件上传

主要的实现步骤:

①使用文件选择器选择图片文件

②把用户选择的文件存入 FormData 对象

③使用 axios 把 FormData 发送给服务器

④模拟文件选择器的点击事件

1651403831099

12 文件域

13-请求报文和响应报文