Ajax

72 阅读3分钟

前后端交互

Ajax其实就是一个前后端的通讯,是我们在开发中,必不可少的一个技能;流程为 在前端开发中, 在某一个时刻(页面首次打开渲染的时候, 或者点击下一页需要新的数据的时候),此时通过 ajax 向后端(服务端)发送一个请求, 拿到 所谓的数据,发送请求需要传一些参数(就是告诉后端你要什么东西).

实现一个Ajax 请求

        // 1. 创建一个 ajax 对象
        const xhr = new XMLHttpRequest()

        // 2. 配置 ajax 对象
        // xhr.open('请求的方式(不区分大小写)', '请求的地址', '一个布尔值')
        xhr.open('GET', 'http://localhost:8888/test/first', true)

        // 3. 发送请求
        xhr.send()

        // 4. 接收响应
        xhr.onload = function () {
            // console.log('现在后端已经给我们返回了 我们想要的数据了')
            console.log(xhr.responseText)   // 哇塞, 你已经成功使用 ajax 发送给我了一个请求, 这是我给你的回应, 我是一个字符串类型 ^_^ !
        }

ajax 的异步问题

ajax 是否异步为 第二步配置Ajax对象的第三个参数决定的, 也就是那个布尔值;默认为 true 代表的是开启异步(异步的运行流程为:1,2,3,4,5), 如果传递的是 false 代表关闭异步开启同步(同步的运行流程为:1,2,3,4或者1,2,4,3).

// 1. 创建一个 ajax 对象
        const xhr = new XMLHttpRequest()

        // 2. 配置 ajax 对象
        xhr.open('GET', 'http://localhost:8888/test/first', false)

        // 4. 接收响应
        xhr.onload = function () {
            // console.log('现在后端已经给我们返回了 我们想要的数据了')
            console.log(xhr.responseText)   // 哇塞, 你已经成功使用 ajax 发送给我了一个请求, 这是我给你的回应, 我是一个字符串类型 ^_^ !
        }

        // 3. 发送请求
        xhr.send()

http 传输协议(了解)

还有一个协议 https, 相对于 http 安全一点点

  • 根据传输协议规定, 必须是由前端向后端发送请求, 发送请求的时候如果要携带一些参数, 必须是字符串格式
    1. 建立连接
  • 浏览器和服务端 建立一个连接
    1. 发送请求
  • 要求前端必须以 '请求报文' 的形式发送;
  • 请求报文 由 浏览器进行组装, 我们只需要提供对应的信息即可;
  • 比如说: 请求的方式, 请求的地址, 请求需要的参数
    1. 接受响应
  • 要求后端必须以 '响应报文' 的形式返回;
  • 响应报文内有一个东西叫做响应状态码;
    1. 断开连接
  • 浏览器和服务端的连接断开
  • 响应状态码
  • 100~199 表明连接还在继续
  • 200~299 表明连接各种成功 但现在只会返回一个 200
  • 300~399 表明请求重定向
  • 400~499 表明请求失败 但现在只会看到一些 403 404 401 400 一般4开头是前端的问题
  • 500~599 表明服务端出错 跟前端无关, 是后端的问题

ajax 的状态码

通过一个数字, 表明 ajax 当前运行到那一步了

  • 0: ajax 创建成功
  • 1: 当前 ajax 配置成功
  • 2: 当前 ajax 发送成功
  • 3: 当前 浏览器 正在解析服务端返回给我们的内容
  • 如果返回的内容少这一步基本能接受完
  • 如果返回的内容很多这一步是接受的不完整的
  • 4: 表明 浏览器 已经把服务端返回的内容 全都解析完毕了~

请求方式的区别

  • get 偏向于获取的语义 (商品列表数据,用户详情,商品详情)
  • eLete 偏向于获取的语义 (删除某一个内容)
  • post 偏向于修改的语义 (修改用户名,修改密码)
  • put 偏向于修改的语义 (修改库存,修改收藏数量)