ajax

发送一个 ajax 请求
+ 使用 js 的方式发送请求
+ 解释以下 ajax
=> a: async
=> j: javascript
=> a: and
=> x: xml
=> 异步的 xml 和 javascript 交互手段

发送一个 ajax 的步骤
1. 创建一个 ajax 对象
+ var xhr = new XMLHttpRequest
=> 实例化一个构造函数, 得到一个对象
=> 得到的这个对象就能帮我们发送 ajax 请求
2. 配置本次请求的信息
+ xhr.open(请求方式, 请求地址, 是否异步)
=> 请求方式: GET 或者 POST 或者 PUT 或者 …(大小写无所谓)
=> 请求地址: 你要请求哪一个文件
=> 是否异步: 默认是异步的, 可以改成同步
-> 你如果不传递, 默认是异步的
3. 把这个请求发送出去
+ xhr.send()
=> 这个方法一执行, 本次 ajax 请求就发送出去了
=> 就发送到 … 文件里面了
4. 接受响应
+ 为什么要接受响应
=> 因为当 js 和 后端 交互的时候
=> 后端返回的内容不会直接显示再浏览器上
=> 而是给了 js 或者说给了 xhr 对象
=> 我们要拿到这个响应内容(后端给前端的数据)
+ 怎么接受响应
=> 使用 onload 事件
=> xhr.onload = function () {}
-> 这个事件是 ajax 完成的时候触发
-> 当本次请求完成以后, 就会触发后面的函数了
=> 再事件里面打印一下 xhr(这个 ajax 对象)
=> 再 xhr 这个对象里面
-> responseText 就是响应体

    // 1. 创建一个 ajax 对象
    //    这个对象就能帮我们发送一个 ajax 请求
    var xhr = new XMLHttpRequest()

    // 2. 配置请求信息
    //    以 GET 的请求方式 向 ajax.php 文件发起一个请求
    xhr.open('GET', './ajax.php')

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

    // 4. 接受响应
    xhr.onload = function () {
      // 这个函数会在当前这个 ajax 请求完成的时候触发
      // 这个 ajax 请求一完成, 那么就会触发这个函数了
      // 我们再这里就能得到后端给返回的数据
      console.log('请求已经完成了')
      console.log(xhr)
    }

ajax 的状态码
+ http 响应状态码 => 表示本次请求时成功还是失败
+ ajax 状态码 => 描述当前处于 ajax 的哪一个步骤
-> 储在 ajax 的第一个换节可能就是 0
-> 进入到 ajax 的第二个换节就是 1
-> …
+ 怎么获取 ajax 状态码
+ ajax对象.readyState
+ 有哪些状态码
=> 0: 表示你创建一个 ajax 对象成功了
=> 1: 表示配置请求信息成功了(也就是执行完 open)
=> 2: 表示响应体已经回到了浏览器, 但是还不能使用(因为此时还是一个响应报文)
=> 3: 浏览器正在解析响应报文(把响应报文里面的响应体分离出来)
=> 4: 浏览器分离响应体成功, 已经可以正常使用了(本次请求结束了)

   // 1. 创建 ajax 对象
    var xhr = new XMLHttpRequest() // => 0

    // ajax 状态码改变的事件
    xhr.onreadystatechange = function () {
      // 只要 ajax 状态码改变了就会触发
      console.log(xhr.readyState) // 直接打印 ajax 状态码

      if (xhr.readyState === 2) {
        // 响应报文回到了浏览器, 但是没有经过解析还不能使用的时候
        console.log('2222222222222222222')
        console.log(xhr.responseText) // 打印响应体
      }

      if (xhr.readyState === 4) {
        // 浏览器已经解析完毕了, 可以正常使用相应体了
        console.log('4444444444444444444')
        console.log(xhr.responseText) // 打印响应体
      }

    }

    // 2. 配置请求信息
    xhr.open('GET', './ajax.php') // => 1

    // 3. 发送请求
    xhr.send() // => 2 3 4

ajax 的兼容处理
+ 兼容处理, 将来再你们开发的过程中
-> 可能要兼容 IE 6 7 8 浏览器
-> 就要处理兼容问题
+ 我们的 ajax 有两个地方不兼容
1. 创建 ajax 对象的时候不兼容
+ new XMLHttpRequest => 标准浏览器使用
+ new ActiveXObject => IE 低版本使用
2. 接受响应的不兼容
+ 标准浏览器 => onload 事件
+ IE 低版本 => 没有 onload 事件
-> IE 低版本只有 onreadstatechange 方法
-> IE 低版本接受响应只能使用 onreadystatechange 这个事件
+ 再这个事件里面进行判断
+ 判断 ajax 结束了 -> ajax 状态码为 4 就是结束
+ 判断 本次 http 请求时成功了的 -> http 状态码时 200 ~ 299 之间
-> xhr.status 就是本次请求的 http 状态码
IE 的问题
-> 创建 ajax 对象这个事情
-> 必须是真实的 IE 6 7 8 浏览器才没有
-> 如果你使用的 IE 11 浏览器的模拟器, 但是浏览器的内核依旧时 IE 11 的内核
-> 你看不出来他不能用
// 创建 ajax 对象
// 标准浏览器 var xhr = new XMLHttpRequest()
// IE 低版本 var xhr = new ActiveXObject(‘Micorsoft.XMLHTTP’)

    var xhr = new XMLHttpRequest()

    // 配置请求信息
    xhr.open('GET', './ajax1.php') // => 异步 再 IE 低版本 下
    // 404 表示请求失败了, 不管请求成功还是失败都能变道 4

    // 接受响应
    // 下面这个代码再 标准浏览器 可以接受到响应体
    // 再 IE 低版本浏览器里面接受不到响应体
    // xhr.onload = function () {
    //   console.log(xhr.responseText)
    // }

    // 接受响应
    // 兼容 IE 的接受响应, 就要使用这个事件
    xhr.onreadystatechange = function () {
      if (xhr.readyState === 4 && /^2\d{2}$/.test(xhr.status)) {
        console.log('确实状态码变成 4 了')
        console.log(xhr.status)
        console.log(xhr.responseText)
      }
    }

    // 发送请求
    xhr.send()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值