Ajax

Ajax

服务器的基本概念与初始Ajax

能够知道服务器相关的基本概念

能够知道客户端与服务器通信的过程

能够知道数据也是一种资源

能够说出什么是Ajax以及应用场景

能够使用jQuery中的Ajax函数请求数据

能够知道接口和接口文档的概念

客户端与服务器

  1. 上网的本质目的:通过互联网的形式来获取和消费资源

  2. 服务器:负责存放和对外提供的电脑,叫做服务器

  3. 客户端:负责获取和消费资源的电脑,叫做客户端

URL地址

  1. URL(UniformResourceLocator),统一资源定位符,用于标识互联网上每个资源的唯一存放位置,浏览器只有通过URL地址,才能正确定位资源的存放位置,从而成功访问到对应的资源

  2. URL地址组成部分

分析网页的打开过程

  1. 客户端请求服务器

    • 打开浏览器

    • 输入要访问的网站地址

    • 回车,向服务器发起资源请求

  2. 服务器处理这次请求

    • 服务器接收到客户端发来的资源请求

    • 服务器在内部处理这次请求,找到相关的资源

    • 服务器把找到的资源,响应(发送)给客户端

  3. 服务器响应客户端

  4. 请求 → 处理 → 响应

  5. 基于浏览器的开发者工具分析通信过程

    • 打开浏览器

    • 调出开发者工具

    • 切换到Network面板

    • 选中Doc标签

    • 刷新页面,分析客户端与服务器的通信过程

服务器对外提供了哪些资源

  1. 网页中长常见的资源

    • 文字内容

    • 图片

    • 音频

    • 视频

    • ......

  2. 网页中的数据是不是资源?

    • 网页中的数据,也是服务器对外提供的一种资源

    • 数据是网页的灵魂

  3. 网页中如何请求数据

    • 数据,也是服务器对外提供的一种资源,只要是资源,必然要通过请求处理响应的方式进行获取

    • 如果要在网页中请求服务器上的数据资源,则需要用到XMLHttpRequest对象

    • XMLHttpRequest(简称xhr)是浏览器提供的js成员,通过它,可以请求服务器上的数据资源

    • 最简单的用法:var xhrObj = new XMLHttpRequest()

  4. 资源的请求方式

    客户端请求服务器的时,请求的方式有很多种,最常见的两种请求方式分别为getpost请求

    • get请求通常用于获取服务器资源(向服务器要资源)

    • post请求通常用于向服务器提交数据(往服务器发送资源)

了解Ajax

  1. 什么是Ajax?

    • Ajax的全称是Asynchronous JavaScript And XML(异步的JavaScript和XML)

    • 在网页中利用XMLHttpRequest对象和服务器进行数据交互的方式,就是Ajax

  2. 为什么要学Ajax?

    • Ajax能够让我们轻松实现网页与服务器之间的数据交互

  3. Ajax的典型应用场景

    • 用户名检测

    • 搜索提示

    • 数据分页显示

    • 数据的增删改查

jQuery中的Ajax

  1. 了解jQuery中的Ajax

    • 浏览器中提供的XMLHttpRequest用法比较复杂,所以jQuery对XMLHttpRequest进行了封装,提供了一系列Ajax相关的函数,极大地降低了Ajax的使用难度

    • jQuery中发起Ajax请求最常用的三个方法:

      • $.get()

      • $.post()

      • $.ajax()

  2. $.get()

    • jQuery中$.get()函数的功能单一,专门用来发起get请求,从而将服务器上的资源请求到客户端进行使用

    • $.get()语法:$.get(url[,data,callback])

      • url:string,必选,要请求的资源地址

      • data:object,可选,请求资源期间要携带的参数

      • callback:function,可选,请求成功时的回调函数

    • <!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>Document</title>
         <script src="jquery-2.0.0.min.js"></script>
      </head>

      <body>
         <script>
             // $.get() 发起不带参数的请求
             $(function() {
                 $.get('http://www.liulongbin.top:3006/api/getbooks', function(res) {
                     console.log(res); // res -- 服务器返回的资源
                })
            })
             
             // $.get() 发起不带参数的请求
             $(function() {
                 $.get('http://www.liulongbin.top:3006/api/getbooks', function(res) {
                     console.log(res); // res -- 服务器返回的资源
                })
            })
         </script>
      </body>

      </html>
  3. $post()

    • jQuery中$.post()函数的功能单一,专门用来发起post请求,从而向服务器提交数据

    • $.post()语法:$.post(url[,data,callback])

      • url:string,必选,提交数据的地址

      • data:object,可选,要提交的数据

      • callback:function,可选,数据提交成功时的回调函数

    • <!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>Document</title>
         <script src="jquery-2.0.0.min.js"></script>
      </head>

      <body>
         <script>
             // $.post() 向服务器提交数据
             $(function() {
                 $.post('http://www.liulongbin.top:3006/api/addbook', {
                     bookname: 'ajax',
                     author: 'itheima',
                     publisher: '传智播客'
                }, function(res) {
                     console.log(res);
                })
            })
         </script>
      </body>

      </html>
  4. $.ajax()

    • jQuery中提供的$.ajax()函数,是一个功能比较综合的函数,它允许我们对Ajax请求进行更详细的配置

    • $.ajax()语法:$.ajax({type: '', // 请求的方式 url: '', // 请求的URL地址 data:{}, // 请求要携带的数据success: function(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>Document</title>
        <script src="jquery-2.0.0.min.js"></script>
      </head>

      <body>
        <script>
            // $.ajax()发起get请求
            $(function() {
                $.ajax({
                    type: 'GET',
                    url: 'http://www.liulongbin.top:3006/api/getbooks',
                    data: {
                        id: 1
                    },
                    success: function(res) {
                        console.log(res);
                    }
                })
            })

            // $.ajax()发起post请求
            $(function() {
                $.ajax({
                    type: 'POST',
                    url: 'http://www.liulongbin.top:3006/api/addbook',
                    data: {
                        bookname: '史记',
                        author: 'itheima',
                        publisher: '传智播客'
                    },
                    success: function(res) {
                        console.log(res);
                    }
                })
            })
        </script>
      </body>

      </html>

接口

  1. 接口的概念

    • 使用Ajax请求数据时,被请求的URL地址,就叫做数据接口(接口),同时,每个接口必须有请求方式

  2. 分析接口的请求过程

    • 请求处理响应

  3. 接口测试工具

  4. 接口文档

    • 接口文档,顾名思义就是接口的说明文档,它是我们调用接口的依据,好的接口文档包含了对接口URL、参数以及输出内容的说明,我们参照接口文档就能方便的知道接口的作用,以及接口如何调用

    • 接口文档的组成部分

      • 接口名称:用来标识各个接口的简单说明

      • 接口URL:接口的调用地址

      • 调用方式:接口的调用方式

      • 参数格式:接口传递的参数,每个参数必须包含参数名称、参数类型、是否必选、参数说明四项内容

      • 响应格式:接口的返回值的详细描述,一般包含数据名称、数据类型、说明三项内容

      • 返回示例(可选):通过对象的形式,举例服务器返回数据的结构

案例-图书管理

 

案例-聊天机器人

 

form表单与模板引擎

能够说出form表单的常用属性

能够知道如何阻止表单的默认提交行为

能够知道如何使用jQuery快速获取表单数据

能够知道如何安装和使用模板引擎

能够知道模板引擎的实现原理

form表单的基本使用

  1. 什么是表单?

    • 表单在网页中主要复杂数据采集功能,HTML中的form标签,就是用于采集用户输入的信息,并通过form标签的提交操作,把采集的信息提交到服务器端进行处理

  2. 表单的组成部分

    • 表单标签

    • 表单域

    • 表单按钮

  3. from标签的属性

  4. 表单同步提交及缺点

    • 什么是表单的同步提交?

      • 通过点击submit按钮,触发表单提交操作,从而使页面跳转到action URL行为,叫做表单的同步提交

    • 表单同步提交的缺点

      • 表单同步提交后,整个页面会发生跳转,跳转到action URL所指向的地址,用户体验很差

      • 表单同步提交后,页面之前的状态和数据会丢失

    • 解决方案:

      • 表单只负责采集数据,Ajax负责将数据提交到服务器

通过Ajax提交表单数据

  1. 监听表单的提交事件

    • 在jQuery中,可以使用如下两种方式,监听到表单的提交事件

    • <!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>Document</title>
         <script src="jquery-2.0.0.min.js"></script>
      </head>

      <body>
         <form action="/login">
             <input type="text" name="user_name">
             <input type="password" name="password">
             <button type="submit">提交</button>
         </form>

         <script>
             $(function() {
                 // 第一种方式
                 $('form').submit(function() {
                     alert('监听到了表单的提交事件')
                })

                 // 第二种方式
                 $('form').on('submit', function() {
                     alert('监听到了表单的提交事件')
                })
            })
         </script>
      </body>

      </html>
  2. 阻止表单的默认提交行为

    • 当监听到表单的提交事件以后,可以调用事件对象的event.preventDefault()函数,来阻止表单的提交和页面的跳转

    • <!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>Document</title>
         <script src="jquery-2.0.0.min.js"></script>
      </head>

      <body>
         <form action="/login">
             <input type="text" name="user_name">
             <input type="password" name="password">
             <button type="submit">提交</button>
         </form>

         <script>
             $(function() {
                 // 第一种方式
                 $('form').submit(function(e) {
                     alert('监听到了表单的提交事件')
                     e.preventDefault(); // 阻止表单默认提交行为
                })

                 // 第二种方式
                 $('form').on('submit', function(e) {
                     alert('监听到了表单的提交事件')
                     e.preventDefault(); // 阻止表单默认提交行为
                })
            })
         </script>
      </body>

      </html>
  3. 快速获取表单中的数据

    • 为了简化表单中数据的获取操作,jQuery提供了serialize()函数,其语法格式如下:$(selector).serialize()

    • serialize()函数的好处:可以一次性获取到表单中所有的数据

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

    • <!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>Document</title>
         <script src="jquery-2.0.0.min.js"></script>
      </head>

      <body>
         <form action="/login">
             <input type="text" name="user_name">
             <input type="password" name="password">
             <button type="submit">提交</button>
         </form>

         <script>
             $(function() {
                 // 第一种方式
                 $('form').submit(function(e) {
                     alert('监听到了表单的提交事件')
                     e.preventDefault(); // 阻止表单默认提交行为
                     var datas = $(this).serialize()
                     console.log(datas)
                })

                 // 第二种方式
                 $('form').on('submit', function(e) {
                     alert('监听到了表单的提交事件')
                     e.preventDefault(); // 阻止表单默认提交行为
                     var datas = $(this).serialize()
                     console.log(datas)
                })
            })
         </script>
      </body>

      </html>
  4. 快速重置表单数据

    • 原生DOM提供了reset()函数

案例-评论列表

 

模板引擎的基本概念

  1. 渲染UI结构时遇到的问题

    • 如果UI结构比较复杂,则拼接字符串的时候需要格外注意引号之间的嵌套,一旦需求发生变化,修改起来非常麻烦

  2. 什么是模板引擎?

    • 模板引擎,顾名思义,它可以根据程序员指定的模板结构和数据,自动生成一个完整的HTML页面

  3. 模板引擎的好处

    • 减少了字符串的拼接操作

    • 使代码结构更清晰

    • 使代码更易于阅读和维护

art-template模板引擎

  1. art-template使一个简约、超快的模板引擎

  2. 中文官网网页

  3. art-template安装

  4. art-template的使用步骤

    • 导入art-template

    • 定义数据

    • 定义模板

    • 调用template函数

    • 渲染HTML结构

    • <!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>Document</title>
         <script src="template-web.js"></script>
         <script src="jquery-2.0.0.min.js"></script>
      </head>

      <body>
         <div id="title"></div>
         <div>姓名:<span id="name"></span></div>
         <div>年龄:<span id="age"></span></div>
         <div>会员:<span id="isVIP"></span></div>
         <div>注册时间:<span id="regTime"></span></div>
         <div>爱好
             <ul id="hobby">
                 <li>爱好1</li>
                 <li>爱好2</li>
             </ul>
         </div>

         <div id="container"></div>

         <script type="text/html" id="tpl-demo">
            <div id="title">{{title}}</div>
            <div>姓名:<span id="name">{{name}}</span></div>
            <div>年龄:<span id="age">{{age}}</span></div>
            <div>会员:<span id="isVIP">{{isVIP}}</span></div>
            <div>注册时间:<span id="regTime">{{regTime}}</span></div>
            <div>爱好
                <ul id="hobby">
                    <li>{{hobby[0]}}</li>
                    <li>{{hobby[1]}}</li>
                </ul>
            </div>
         </script>

         <script>
             var data = {
                 title: '<h3>用户姓名</h3>',
                 name: 'zs',
                 age: 20,
                 isVIP: true,
                 regTime: new Date(),
                 hobby: ['吃饭', '睡觉', '打豆豆']
            }

             // 传统方式渲染UI结构
             $(function() {
                 $('#title').html(data.title)
                 $('#name').html(data.name)
                 $('#isVIP').html(data.isVIP)
                 $('#regTime').html(data.regTime)
                 var rows = []
                 $.each(data.hobby, function(i, item) {
                     rows.push(`<li>${item}</li>`)
                })
                 $('#hobby').html(rows.join(''))
            })

             // 使用模板引擎渲染UI机构
             var htmlStr = template('tpl-demo', data)
             $(function() {
                 $('#container').html(htmlStr)
            })
         </script>
      </body>

      </html>
  5. art-template的标准语法

    • 什么是art-template的标准语法

      • art-template提供了{{}}这种语法格式,在{{}}就可以进行变量输出,或循环数组等操作,这种{{}}语法在art-template中被称为标准语法

    • 标准语法-输出 {{value}}

      • 在{{}}语法中,可以进行变量的输出、对象属性的输出、三元表达式的输出、逻辑或输出、加减乘除等表达式输出

    • 标准语法-原文输出 {{@ value}}

      • 如果输出的value值中,包含HTML标签结构,则需要使用原文输出语法,才能保证HTML标签被正常渲染

    • 标准语法-条件输出

      • 如果要实现条件输出,则可以在{{}}中使用if...else if.../if的方式,进行按需输出

      • {{if value}} 按需输出的内容 {{/if}}

      • {{If value1}} 按需输出的内容 {{else if value2}} 按需输出的内容 {{/if}}

    • 标准语法-循环输出

      • {{each arr}} {{$index}} {{$value}} {{/each}}

    • 标准语法-过滤器

      • 需要处理的值 (参数)→ 过滤器函数 (返回值)→输出新值

      • 过滤器的本质,就是一个function处理函数

      • 过滤器语法:{{value | filterName(处理函数}}

      • 过滤器的语法类似管道操作符,它的上一个输出作为下一个输入

      • 定义过滤器的基本语法:

        • template.defaults.imports.filterName = function(value) { /* return 处理的结果 */}

    •  

模板引擎的实现原理

  1. 正则与字符串操作

    • 基本语法

      • 语法:RegExpObject.exec(string)

      • exec()函数用于检索字符串中正则表达式的匹配,如果字符串中有匹配的值,则返回该匹配值,否则返回null

    • 分组

      • 正则表达式中()包起来的内容表示一个分组,可以通过分组来提取自己想要的内容

    • 字符串的replace()函数

      • replace()函数用于在字符串中用一些字符替换另一些字符

    • 多次replace

    • 使用while循环进行replace操作

    • replace替换为真值

    • <!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>Document</title>
      </head>

      <body>
         <script>
             // 正则和字符串操作
             var str = 'hello';
             // var pattern = /x/; // null
             var pattern = /o/; // 数组
             var result = pattern.exec(str);
             console.log(result);

             // 分组
             var str1 = '<div>我是{{name}}</div>';
             var pattern1 = /{{([a-zA-Z]+)}}/;
             var result1 = pattern1.exec(str1);
             console.log(result1);

             // replace()
             var str2 = '<div>我是{{name}}</div>';
             var pattern2 = /{{([a-zA-Z]+)}}/;
             var result2 = pattern2.exec(str2);
             str2 = str2.replace(result2[0], result2[1])
             console.log(str2);

             // 多次replace 使用while循环进行replace操作
             var str3 = '<div>我是{{name}},今年{{ age }}岁了</div>';
             var pattern3 = /{{\s*([a-zA-Z]+)\s*}}/;
             var result3 = null

             while (result3 = pattern3.exec(str3)) {
                 str3 = str3.replace(result3[0], result3[1]);
            }

             console.log(str3);

             /* console.log(result3);
            str3 = str3.replace(result3[0], result3[1]);
            console.log(str3);
            result3 = pattern3.exec(str3);
            console.log(result3);
            str3 = str3.replace(result3[0], result3[1]);
            console.log(str3);
            result3 = pattern3.exec(str3);
            console.log(result3); // null */

             // replace替换为真值
             var data = {
                 name: 'zs',
                 age: 20
            }

             var str4 = '<div>我是{{name}},,今年{{ age }}岁了</div>';
             var pattern4 = /{{\s*([a-zA-Z]+)\s*}}/;
             var result4 = null;
             while (result4 = pattern4.exec(str4)) {
                 str4 = str4.replace(result4[0], data[result4[1]])
            }

             console.log(str4);
         </script>
      </body>

      </html>

Ajax加强

能够知道如何使用XMLHttpRequest发起Ajax请求

能够知道如何封装自己的Ajax函数

能够使用XMLHttpRequest Level2中提供的新特性

能够知道jQuery中如何实现文件上传与loading效果

能够知道如何使用axios发起Ajax请求

XMLHttpRequest的基本使用

  1. 什么是XMLHttpRequest

    • XMLHttpRequest(简称xhr)是浏览器提供的JavaScript对象,通过它,可以i请求服务器上的数据资源,之前所学的jQuery中的Ajax函数,就是基于xhr对象封装出来的

  2. 使用xhr发起GET请求

    • 创建xhr对象

    • 调用xhr.open()函数 -- 创建GET请求

    • 调用xhr.send()函数 -- 发送GET请求

    • 监听xhr.onreadystatechange事件

  3. 了解xhr对象的readyState属性

    • XMLHttpRequest对象的readyState属性,用来表示当前Ajax请求所处的状态,每个Ajax请求必然处于以下状态中的一个:

    • 状态描述
      0 UNSET XMLHttpRequest对象已被创建,但尚未调用open()方法
      1 OPEN open()方法已经被调用
      2 HEADERS_RECEIVED send()方法已经被调用,响应头也已经被接收
      3 LOADING 数据接收中,此时response属性已经包含部分数据
      4 DONE Ajax请求完成,这意味着数据传输已经彻底完成或失败
  4. 使用xhr发起带参数的GET请求

    • 使用xhr对象发起带参数的GET请求时,只需在调用xhr.open期间,为URL地址指定参数即可

    • 跟在URL地址后面拼接的参数,叫做查询字符串

  5. 查询字符串

    • 什么是查询字符串?

      • 定义:查询字符串(URL参数)是指在URL的末尾加上用于向服务器发送信息的字符串(变量)

      • 格式:将英文的?放在URL的末尾,然后加上参数=值,想加上多个参数的话,使用&符号进行分隔,以这个形式,可以将想要发送给服务器的数据添加到URL中

    • GET请求携带参数的本质

      • 无论使用&.ajax(),还是$.get(),又或者直接使用xhr对象发起GET请求,当需要携带参数的时候,本质上,都是直接将参数以查询字符串的形式,追加到URL地址的后面,发送到服务器的

  6. URL编码与解码

    • 什么是URL编码?

      • URL地址中,只允许出现英文相关的字母、标点符号、数字,因此,在URL地址中不允许出现中文字符等

      • 如果URL中需要包含中文这样的字符,则必须对中文字符进行编码(转义)

      • URL编码原则:使用安全的字符(没有特殊用途或者特殊意义的可打印字符)去表示那些不安全的字符

      • URL编码原则通俗理解:使用英文字符去表示非英文字符

    • 如何对URL进行编码与解码

      • 浏览器提供了URL编码与解码的API,分别是:

        • encodeURL() 编码的函数

        • decodeURL() 解码的函数

    • URL编码的注意事项

  7. 使用xhr发起POST请求

    • 创建xhr对象

    • 调用xhr.open()函数 -- 创建POST请求

    • 设置Content-Type属性(固定写法)

    • 调用xhr.send()函数,同时指定要发送的数据 -- 发送POST请求

    • 监听xhr.onreadystatechange事件

  8. <!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>Document</title>
       <script src="jquery-2.0.0.min.js"></script>
    </head>

    <body>
       <script>
           // 创建xhr对象
           var xhr = new XMLHttpRequest();
           // 调用xhr.open() 函数
           xhr.open('GET', 'http://www.liulongbin.top:3006/api/getbooks');
           // 调用xhr.send() 函数
           xhr.send();
           // 监听xhr.onreadystatechange事件
           xhr.onreadystatechange = function() {
               // 固定的判断条件
               if (xhr.readyState === 4 && xhr.status === 200) {
                   console.log(xhr.responseText);
              }
          }

           // 发起带参数的GET请求
           // jqueryAjax
           $(function() {
               $.get('http://www.liulongbin.top:3006/api/getbooks', {
                   bookname: '测试中'
              }, function(res) {
                   console.log(res.data);
              })
          });

           // 原生Ajax
           // 创建xhr对象
           var xhr1 = new XMLHttpRequest();
           // 调用xhr.open() 函数
           xhr1.open('GET', 'http://www.liulongbin.top:3006/api/getbooks?id=1');
           // 调用xhr.send() 函数
           xhr1.send();
           // 监听xhr.onreadystatechange事件
           xhr1.onreadystatechange = function() {
               // 固定的判断条件
               if (xhr1.readyState === 4 && xhr1.status === 200) {
                   console.log(xhr1.responseText);
              }
          }

           // URL编码与解码
           var str = '黑马程序员';
           str = encodeURI(str);
           console.log(str);
           str = decodeURI(str)
           console.log(str);
       </script>
    </body>

    </html>
  9. <!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>Document</title>
    </head>

    <body>
       <script>
           // 基于xhr发起POST请求
           // 创建xhr对象
           var xhr = new XMLHttpRequest();
           // 调用open()
           xhr.open('POST', 'http://www.liulongbin.top:3006/api/addbook');
           // 设置Content-Type属性(固定写法)
           xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
               // 调用send()
           xhr.send('bookname=测试中&author=施耐庵&publisher=天津图书出版社');
           // 监听onreadystatechange事件
           xhr.onreadystatechange = function() {
               if (xhr.readyState === 4 && xhr.status === 200) {
                   console.log(xhr.responseText);
              }
          }
       </script>
    </body>

    </html>

数据交换格式

  1. 什么是数据交换格式

    • 服务器与客户端之间进行数据传输与交换的格式

      • XML(使用非常少)

      • JSON

  2. XML

    • 什么是XML?

      • XML的英文全称是EXtensibleMarkupLanguage,即可扩展标记语言,因此,XML与HTML类似,也是一种标记语言

      • <note>
        <to>ls</to>
           <form>zs</form>
           <heading>通知</heading>
           <body>晚上开会</body>
        </note>
    • XML和HTML的区别

      • 二者虽然都是标记语言,但是,它们两者之间没有任何联系

      • HTML被设计用来描述网页上的内容,是网页内容的载体

      • XML被设计用来传输和存储数据,是数据的载体

    • XML的缺点

      • XML格式臃肿,和数据无关的代码多,体积大,传输效率低

      • 在JavaScript中解析XML比较麻烦

  3. JSON

    • 什么是JSON?

      • 概念:JSON的英文全称是JavaScript Object Noation,即JavaScript表示法,简单来讲,JSON就是JavaScript对象和数组的字符串表示法,它使用文本表示一个JS对象或数组的信息,因此,JSON的本质是字符串

      • 作用:JSON是一种轻量级的文本数据交换格式,在作用上类似于XML,专门用于存储和传输数据,但是JSON比XML更小,更快,更易解析

      • 现状:JSON是在2001年开始被推广和使用的数据格式,迄今为止,JSON已经称为了主流的数据交换格式

    • JSON的两种结构

      • JSON就是用字符串来表示JavaScript的对象和数组,所以,JSON中包含对象和数组两种结构,通过这两种结构的相互嵌套,可以表示各种复杂的数据结构

      • 对象结构:

        • 对象结构在JSON中表示为{}括起来的内容,数据结构为{key:value,key:value,...}的键值对结构,其中,key必须是英文的双引号包裹的字符串,value的数据类型可以是数字,字符串,布尔值,null,数组,对象6种类型

      • 数组结构:

        • 数组结构在JSON种表示为[]括起来的内容,数据结构为:["java","javascript",30,true],数组种数据的类型可以是数字,字符串,布尔值,null,数组,对象6种类型

    • JSON语法注意事项

      • 属性名必须使用双引号包裹

      • 字符串类型的值必须使用双引号包裹

      • JSON中不允许使用单引号表示字符串

      • JSON中不能写注释

      • JSON的最外层必须是对象或数组格式

      • 不能使用undefined或函数作为JSON的值

      • JSON的作用:在计算机与网络之间存储和传输数据

      • JSON的本质:用字符串来表示JavaScript数组和对象

    • JSON和JS对象的关系

      • JSON是JS对象的字符串表示法,它使用文本表示一个JS对象的信息,本质是一个字符串

    • JSON和JS对象的互转

      • JSON.parse()

      • JSON.stringify()

    • 序列化和反序列化

      • 把数据对象转换为字符串的过程,叫做序列化,序列化函数

      • 把字符串转换为数据对象的过程,叫做反序列化,反序列化函数

    • <!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>Document</title>
      </head>

      <body>
         <script>
             // JSON和JS对象互转
             // JSON.parse(参数) -- JSON → JS
             var json = '[{"name": "zs", "age": 20},{"name": "lisi", "age": 20},{"name": "wangwu", "age": 20}]';
             var js = JSON.parse(json);
             console.log(js);

             // JSON.stringify(参数) -- JS → JSON
             var json1 = JSON.stringify(js);
             console.log(json1, typeof json1);

             // 使用场景
             // 创建xhr对象
             var xhr = new XMLHttpRequest();
             // 调用xhr.open() 函数
             xhr.open('GET', 'http://www.liulongbin.top:3006/api/getbooks');
             // 调用xhr.send() 函数
             xhr.send();
             // 监听xhr.onreadystatechange事件
             xhr.onreadystatechange = function() {
                 // 固定的判断条件
                 if (xhr.readyState === 4 && xhr.status === 200) {
                     console.log(xhr.responseText);
                     console.log(JSON.parse(xhr.responseText));
                }
            }
         </script>
      </body>

      </html>

封装自己的Ajax函数

js文件

// 处理data参数
function resloveData(data) {
  var parameterStr = [];
  for (var k in data) {
      parameterStr.push(k + '=' + data[k])
  }
  parameterStr = parameterStr.join('&');
  return parameterStr;
}

// 封装Ajax函数
function itheima(obj) {
  var xhr = new XMLHttpRequest();

  var parameterStr = resloveData(obj.data);

  if (obj.method.toUpperCase() === 'GET') {
      obj.url = obj.url + '?' + parameterStr;
      xhr.open(obj.method, obj.url);
      xhr.send();
  } else if (obj.method.toUpperCase() === 'POST') {
      xhr.open(obj.method, obj.url);
      xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      xhr.send(parameterStr);
  } else {
      console.log('请求类型错误');
  }

  xhr.onreadystatechange = function() {
      if (xhr.readyState === 4 && xhr.status === 200) {
          var result = JSON.parse(xhr.responseText);
          obj.success(result);
      }
  }
}

html文件

<!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>Document</title>
   <script src="itheima.js"></script>
</head>

<body>
   <script>
       // 定义Ajax参数 -- 配置对象
       var obj = {
           method: 'GET',
           url: 'http://www.liulongbin.top:3006/api/getbooks',
           data: {
               id: 1,
               bookname: '西游记'
          },
           success: function(res) {
               console.log(res);
          }
      };

       var obj1 = {
           method: 'POST',
           url: 'http://www.liulongbin.top:3006/api/addbook',
           data: {
               bookname: '测试中',
               author: '测试中',
               publisher: '测试中'
          },
           success: function(res) {
               console.log(res);
          }
      };

       // 调用自己封装的Ajax函数
       itheima(obj1);
       itheima(obj);
   </script>
</body>

</html>

 

XMLHttpRequest Level2的新特性

  1. 旧版XMLHttpRequest的缺点

    • 只支持文本数据的传输,无法用来读取和上传文件

    • 传送和接收数据时,没有进度条信息,只能提示有没有完成

  2. XMLHttpRequest Level2的新功能

    • 可以设置HTTP请求的时限

    • 使用FormData对象管理表单数据

    • 可以上传文件

    • 可以获得数据传输的进度信息

  3. 设置HTTP请求时限

    • 有时,Ajax操作很耗时,而且无法预知要花多少时间,如果网速很慢,用户可能要等待很久,新版本的XMLHttpRequest对象,增加了timeout属性,可以设置HTTP请求的时限,与之配套的还有一个timeout时间,用来指定回调函数

    • <!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>Document</title>
      </head>

      <body>
         <script>
             // 设置HTTP请求时限
             var xhr = new XMLHttpRequest();
             // xhr.timeout = 3000;
             xhr.timeout = 30; // 请求超时
             xhr.ontimeout = function() {
                 console.log('请求超时');
            }
             xhr.open('get', 'http://www.liulongbin.top:3006/api/getbooks');
             xhr.send();
             xhr.onreadystatechange = function() {
                 if (xhr.readyState === 4 && xhr.status === 200) {
                     console.log(xhr.responseText);
                }
            }
         </script>
      </body>

      </html>
  4. FormData对象管理表单数据

    • 创建FormData实例

    • 调用append(),向fd中追加数据

    • 提交FormData实例

  5. 上传文件

    • 新版本的XMLHttpRequest对象,不仅可以发送文本信息,还可以上传文件

      • 定义UI结构

      • 验证是否选择了文件

      • 向FormData中追加文件

      • 使用xhr发起上传文件的请求

      • 监听onreadystatechange事件

    • <!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>Document</title>
      </head>

      <body>
         <!-- 定义UI结构 -->
         <input type="file" id="file1">
         <button id="btnUpload">上传文件</button>
         <br />
         <img src="" alt="" id="img" width="800">

         <script>
             var btn = document.querySelector('#btnUpload');
             btn.addEventListener('click', function() {
                 var files = document.querySelector('#file1').files;
                 if (files.length <= 0) {
                     return alert('请先选择要上传的文件');
                }
                 console.log('用户选择了待上传的文件');

                 var fd = new FormData();
                 fd.append('avater', files[0]);

                 var xhr = new XMLHttpRequest()
                 xhr.open('POST', 'http://www.liulongbin.top:3006/api/upload/avatar');
                 xhr.send(fd);

                 xhr.onreadystatechange = function() {
                     if (xhr.readyState === 4 && xhr.status === 200) {
                         var data = JSON.parse(xhr.responseText);
                         console.log(data);
                         if (data.status === 200) {
                             document.querySelector('#img').src = 'http://www.liulongbin.top:3006' + data.url;
                        } else {
                             console.log(data.message);
                        }
                    }
                }
            })
         </script>
      </body>

      </html>
  6. 显示文件上传进度

    • 新版本的XMLHttpRequest对象中,可以通过加你听xhr.upload.onprogress事件,来获取文件的上传进度

      • e.lengthComputable 一个布尔值,表示当前上传的资源是否具有可计算的长度

      • e.loaded 已传输的字节

      • e.total 需传输的总字节

    • <!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>Document</title>
         <!-- 新 Bootstrap5 核心 CSS 文件 -->
         <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/5.1.1/css/bootstrap.min.css">

         <!-- 最新的 Bootstrap5 核心 JavaScript 文件 -->
         <script src="https://cdn.staticfile.org/twitter-bootstrap/5.1.1/js/bootstrap.bundle.min.js"></script>

         <script src="jquery-2.0.0.min.js"></script>
      </head>

      <body>
         <!-- 定义UI结构 -->
         <input type="file" id="file1">
         <button id="btnUpload">上传文件</button>
         <br />
         <div class="progress">
             <div class="progress-bar" style="width:0%">0%</div>
         </div>

         <img src="" alt="" id="img" width="800">

         <script>
             var btn = document.querySelector('#btnUpload');
             btn.addEventListener('click', function() {
                 var files = document.querySelector('#file1').files;
                 if (files.length <= 0) {
                     return alert('请先选择要上传的文件');
                }
                 console.log('用户选择了待上传的文件');

                 var fd = new FormData();
                 fd.append('avater', files[0]);

                 var xhr = new XMLHttpRequest();


                 xhr.upload.onprogress = function(e) {
                     if (e.lengthComputable) {
                         var percentComplete = Math.ceil((e.loaded / e.total) * 100);
                         /* document.querySelector('.progress-bar').style.width = percentComplete + '%';
                        document.querySelector('.progress-bar').innerHTML = percentComplete + '%'; */
                         $('.progress-bar').attr('style', 'width:' + percentComplete + '%').html(percentComplete + ' % ');
                         console.log(percentComplete);
                    }
                }

                 xhr.open('POST', 'http://www.liulongbin.top:3006/api/upload/avatar');
                 xhr.send(fd);

                 xhr.onreadystatechange = function() {
                     if (xhr.readyState === 4 && xhr.status === 200) {
                         var data = JSON.parse(xhr.responseText);
                         console.log(data);
                         if (data.status === 200) {
                             document.querySelector('#img').src = 'http://www.liulongbin.top:3006' + data.url;
                        } else {
                             console.log(data.message);
                        }
                    }
                }
            })
         </script>
      </body>

      </html>

jQuery高级用法

 

axios

  1. 什么是axios?

    • axios是专注于网络数据请求的库

    • 相比于原生的XMLHttpRequest对象,axios简单易用

    • 相比于jQuery,axios更加轻量化,只专注于网络数据请求

  2. axios

    • axios发起GET请求

      • axios.get('url', {params: { // 参数}}).then(callback)

    • axiosf发起POST请求

      • axios.post('url', {// 参数}).then(callback)

  3. 直接使用axios发起请求

    • axios(method: '请求类型', url: '请求的URL地址', data: {// psot数据}, params: {// get参数}).then(callback)

  4. <!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>Document</title>
       <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    </head>

    <body>
       <button id="btn1">直接发起get请求/发起get请求</button>
       <button id="btn2">直接发起post请求/发起post请求</button>

       <script>
           document.querySelector('#btn1').addEventListener('click', function() {
               // axios 发起get请求
               // 请求的url地址
               var url = 'http://www.liulongbin.top:3006/api/get';
               // 请求的参数对象
               var paramsObj = {
                   name: 'zs',
                   age: 20
              };
               /* // 调用axios.get() 发起get请求
              axios.get(url, {
                  params: paramsObj
              }).then(function(res) {
                  var result = res.data;
                  console.log(res);
                  console.log(result);
              }) */
               axios({
                   method: 'get',
                   url: url,
                   params: paramsObj,
              }).then(function(res) {
                   console.log(res.data);
              })
          })

           document.querySelector('#btn2').addEventListener('click', function() {
               // axios 发起post请求
               // 提交的url地址
               var url = 'http://www.liulongbin.top:3006/api/post';
               // 提交的参数对象
               var dataObj = {
                   address: '北京',
                   location: '顺义区'
              };
               /* // 调用axios.post() 发起get请求
              axios.post(url, dataObj).then(function(res) {
                  var result = res.data;
                  console.log(res);
                  console.log(result);
              }) */
               axios({
                   method: 'post',
                   url: url,
                   data: dataObj
              }).then(function(res) {
                   console.log(res.data);
              })
          })
       </script>
    </body>

    </html>

跨域和同源策略

能够知道什么是跨域和同源策略

能够知道什么是JSONP

能够说出JSONP的实现原理

能够知道防抖和节流的概念

了解同源策略和跨域

  1. 什么是同源?

    • 如果两个页面的协议、域名和端口都相同,则两个页面具有相同的源

  2. 什么是同源策略?

    • 同源策略(Same origin policy)是浏览器提供的一个安全功能

    • 同源策略限制了从同一个源加载的文件或脚本如何与来自另一个源的资源进行交互,这是一个用于隔离潜在恶意文件的重要安全机制

  3. 什么是跨域?

    • 同源指的是两个URL的协议、域名、端口一致,反之,则是跨域

    • 出现跨域的原因:同源策略

  4. 浏览器对跨域请求的拦截

    • 浏览器允许发起跨域请求,但是跨域请求回来的数据,会被浏览器的同源策略拦截,无法被页面获取到

  5. 如何实现跨域数据请求

    • JSONP

      • 出现早,兼容性好,前端程序员提出的临时解决方案,只支持GET请求

    • CORS

      • 出现晚,W3C标准,跨域Ajax请求的根本解决方案,支持GET和POST请求,不兼容某些低版本的浏览器

JOSNP

  1. 什么是JSONP

    • JSONP(JSON with Padding)是JSON的一种使用模式,可以解决主流浏览器的跨域数据访问的问题

  2. JSONP实现原理

    • 由于浏览器同源策略的限制,网页中无法通过Ajax请求非同源的接口数据,但是script标签不受浏览器的同源策略的影响,可以通过src属性,请求非同源的js脚本

    • 因此,JSONP的实现原理,就是通过script标签的src属性,请求跨域的数据接口,并通过函数调用的形式,接收跨域接口响应回来的数据

  3. JSONP的缺点

    • 由于JSONP是通过script标签的src属性,来实现跨域数据获取的,所以,JSONP只支持GET数据请求,不支持POST请求

    • 注意:JSONP和Ajax之间没有任何关系,不能把JSONP请求数据的方式叫做Ajax,因为JSONP没有用到XMLHttpRequest这个对象

  4. jquery中的JSONP

    • jquery提供的$.ajax()函数,除了可以发起真正的Ajax,除了可以发起真正的Ajax数据请求之外,还能够发起JSONP数据请求

    • 在使用jquery发起JSONP请求时,如果想要自定义JSONP的参数以及回调函数名称,可以通过如下两个参数来指定

      • jsonp: '发送到服务器的参数名称,默认值为callback'

      • jsonCallback: '自定义的回调函数名称,默认值为jqueryxxx格式'

  5. JSONP是什么? (biancheng.net)

防抖和节流

  1. 什么是防抖?

    • 防抖策略(debounce)是当事件被触发后,延迟n秒后再执行回调,如果在这n秒内事件又被触发,则重新计时

    • 防抖的应用场景:用户在输入框中连续输入一串字符串时,可以通过防抖策略,只在输入完成后,才执行查询的请求,这样可以有效减少请求次数,节约请求资源

    • 实现输入框的防抖

  2. 缓存搜索的建议列表

    • 定义全局缓存对象

    • 将搜索结果保存到缓存对象中

    • 优先从缓存中获取搜索建议

  3. 什么是节流?

    • 节流策略(throttle),顾名思义,可以减少一段时间内事件的触发频率

    • 节流的应用场景:

      • 鼠标连续不断地触发某事件,只在单击时间内只触发一次

      • 懒加载时要监听计算滚动条的位置,但不必每次滑动都触发,可以降低计算的频率,而不必去浪费CPU资源

    • 实现节流阀

  4. 防抖和节流的区别

    • 防抖:如果时间被频繁触发,防抖能保证只有最后一次触发生效,前面n多次的触发都会被忽略

    • 节流:如果时间被频繁触发,节流能够减少时间触发的频率,因此,节流时有选择性执行一部分事件

案例-淘宝搜索

<!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>Document</title>
   <script src="jquery-2.0.0.min.js"></script>
   <script src="template-web.js"></script>
</head>

<body>
   <h1>淘宝</h1>
   <input type="text" />
   <button>搜索</button>

   <ul>

   </ul>

   <!-- 模板 -->
   <script type="text/html" id="tpl">
      {{each result}}
      <li>{{$value[0]}}</li>
      {{/each}}
   </script>

   <script>
       // 防抖的timer
       var timer = null;
       // 定义全局缓存对象
       var cacheObj = {};

       // 事件处理程序
       $(function() {
           $('input').on('keyup', function() {
               var keywords = $(this).val().trim();
               if (keywords <= 0) {
                   return $('ul').empty().hide();
              }

               /* getSuggestList(keywords); */
               clearTimeout(timer);

               // 优先从缓存中获取搜索建议
               if (cacheObj[keywords]) {
                   return renderSuggestList(cacheObj[keywords])
              }

               debounceSearch(keywords);


          })
      })

       // jsonp 获取数据
       function getSuggestList(kw) {
           $.ajax({
               url: 'https://suggest.taobao.com/sug?q=' + kw,
               dataType: 'jsonp',
               success: function(res) {
                   console.log(res.result, res.result.length);
                   renderSuggestList(res);
              }
          })
      }

       // 渲染页面
       function renderSuggestList(res) {
           if (res.result.length <= 0) {
               return $('ul').empty().hide();
          }

           var htmlStr = template('tpl', res);
           $('ul').html(htmlStr).show();

           // 将搜索结果保存到缓存对象中
           // 获取到用户输入的内容,当作键
           var k = $('input').val().trim();
           // 将数据作为值,进行缓存
           cacheObj[k] = res;
      }

       // 定义防抖的函数
       function debounceSearch(keywords) {
           tiemr = setTimeout(function() {
               getSuggestList(keywords);
          }, 500)
      }
   </script>
</body>

</html>

案例-图片跟随鼠标

<!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>Document</title>
   <script src="jquery-2.0.0.min.js"></script>
   <style>
      * {
           margin: 0;
           padding: 0;
      }
       
       img {
           position: relative;
      }
   </style>
</head>

<body>
   <img src="loading.gif" alt="">

   <script>
       $(function() {
           // 预定义一个节流阀
           var timer = null;
           $(document).on('mousemove', function(e) {
               // console.log(e.pageX, e.pageY);
               // 判断节流阀是否为空,如果不为空,则证明距离上次执行时间间隔不足xx秒
               if (timer) {
                   return;
              }

               timer = setTimeout(function() {
                   $('img').css('left', e.pageX - 300 + 'px').css('top', e.pageY - 300 + 'px');
                   // 设置了鼠标跟随效果后,清空timer节流阀,方便下次开启延时器
                   timer = null;
              }, 16)
          })
      })
   </script>
</body>

</html>

HTTP协议加强

能够说出什么是HTTP协议

能够知道HTTP请求消息和组成部分

能够知道HTTP响应消息的组成部分

能够说出常见的请求方法

能够说出常见的响应状态码

HTTP协议简介

  1. 什么是通信?

    • 通信,就是信息的传递和交换

    • 通信的主体

    • 通信的内容

    • 通信的方式

  2. 什么是通信协议?

    • 通信协议指的是通信的双方完成通信所必须遵守的规则和约定

    • 互联网中的通信协议

      • 客户端与服务器之间要实现网页内容的传输,则通信的双方必须遵守网页内容的传输协议

      • 网页内容又叫做超文本,因此网页内容的传输协议又叫做超文本传输协议,简称HTTP协议

  3. 什么是HTTP协议?

    • HTTP协议即超文本传送协议,它规定了客户端与服务器之间进行网页内容传输时,所必须遵守的传输格式

  4. HTTP协议的交互模型

    • HTTP协议采用了请求/响应的交互模型

HTTP请求消息

  1. 什么是HTTP请求消息?

    • 由于HTTP协议属于客户端浏览器与服务器之间的通讯协议,因此,客户端发起的请求叫做HTTP请求,客户端发送到服务器的消息,叫做HTTP请求消息,HTTP请求消息又叫做HTTP请求报文

  2. HTTP请求消息的组成部分

    • HTTP请求消息由请求行、请求头部、空行和请求体四个部分组成

    • 请求行

      • 由请求方式、URL、HTTP协议版本三部分组成,它们之间使用空格隔开

    • 请求头部

      • 请求头部用来描述客户端的基本信息,从而把客户端相关的信息告知服务器

      • 请求头部由多行键值对组成,每行的键和值之间用英文的冒号分隔

      • 常见的请求头字段 HTTP Headers - HTTP | MDN (mozilla.org)

    • 空行

      • 最后一个请求头字段的后面是一个空行,通知服务器请求头部到此结束

      • 请求消息中的空行,用来分隔请求头部与请求体

    • 请求体

      • 请求体中存放的,是要通过POST方式提交到服务器的数据

      • 只有POST请求才有请求体,GET请求没有请求体

HTTP响应消息

  1. 什么是HTTP响应消息?

    • 响应消息就是服务器响应给客户端的消息内容,也叫做响应报文

  2. HTTP响应消息的组成部分

    • HTTP响应消息由状态行、响应头部、空行和响应体四个部分组成

    • 状态行

      • 由协议版本、状态码、状态码描述三个部分组成,它们之间使用空格隔开

    • 响应头部

      • 响应头部用来描述服务器的基本信息,响应头由多行键值对组成,每行的键值之间用英文的冒号分隔

      • 常见的响应头部字段 HTTP Headers - HTTP | MDN (mozilla.org)

    • 空行

      • 在最后一个响应头部字段结束之后,会紧跟一个空行,用来通知客户端响应头部至此结束

      • 响应消息中的空行,用来分隔响应头部和响应体

    • 响应体

      • 响应体中存放的,是服务器响应给客户端的资源内容

HTTP请求方法

  1. 什么是HTTP请求方法?

    • HTTP请求方法,属于HTTP协议中的一部分,请求方法的作用,用来表明要对服务器上的资源执行的操作,最常用的请求方法是GET和POST

  2. HTTP的请求方法

HTTP响应状态码

  1. 什么是HTTP响应状态码?

    • HTTP响应状态码,也属于HTTP协议的一部分,用来标识响应的状态

    • 响应状态码会随着响应消息一起被发送至客户端浏览器,浏览器根据服务器返回的响应状态码,就知道这次HTTP请求的结果是成功还是失败了

  2. HTTP响应状态码的组成以及分类

    • HTTP响应状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字用来对状态码进行细分

    • HTTP状态码共分为五种类型

更多HTTP教程参考 HTTP 教程 | 菜鸟教程 (runoob.com)

posted @ 2022-09-18 15:07  litilestar  阅读(52)  评论(0)    收藏  举报