19.1 轻松掌握 XMLHttpRequest

1. 基础知识

XMLHttpRequest 是一个对象,由浏览器提供,最早由 IE5 引入。

利用 XMLHttpRequest 可以实现,无需卸载页面即可向服务器请求额外的数据。

2. 手写一个 XMLHttpRequest

var xhr = new XMLHttpRequest()

xhr.open('get', 'http://www.baidu.com', ture)

xhr.onreadystatechange = function () {
  if (xhr.readyState === 4) {
    if (xhr.status >= 200 || xhr.status === 304) {
      //  请求成功
    } else {
      // 请求失败
    }
  }
}

xhr.setRequestHeader('token', '123123')

xhr.send(null)

3. XMLHttpRequest 的注意事项

// 1. 构造函数,用 new 的形式使用
var xhr = new XMLHttpRequest()

// 2.open方法接受三个参数,分别为: 请求类型;请求地址,是否异步发送请求
xhr.open('get', 'http://www.baidu.com', ture)

// 3.监听readystate状态码的改变,
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4) {
    if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) {
    } else {
    }
  }
}

// 4 自定义请求头
xhr.setRequestHeader('token', '123123')

// 5. 发送请求数据,如果不传递参数,则必须传 null
xhr.send(null)

注意事项

  • XMLHttpRequset IE8 以下有兼容性问题;

  • XMLHttpRequset支持同步请求;

  • onreadystatechange 事件名称全小写;

    • onreadystatechange 函数中推荐使用xhr,而不是 this,作用域在某些浏览器中有些不同。
  • readyState 状态码的区分

    • 0 :未初始化,尚未调用 open() 方法;
    • 1 :启动,已经调用了 open() 方法,打算尚未调用 send() 方法;
    • 2:发送,已经调用 send() 方法,但未接收到响应;
    • 3:接收,已经接收到部分数据;
    • 4:完成,已经接收到全部响应数据,而且已经可以在客户端使用了;
  • status的筛选

    • 2XX 的状态码是请求成功的 status 状态码;
    • 注意 304 很有意思,指请求的资源并没有被修改;
  • setRequestHeader 在 open() 方法和 send() 方法中间才有效;

  • send 方法如果不传递参数,则必须传 null

end

总结一下,写这篇文章,学习到的收获:

  • 阅读了 《javascript高级程序设计》有关ajax的章节;
  • 手写了一遍利用 XMLHttpRequest 发起请求的代码;
  • 记住了一些单词:
    • XMLHttpRequest
    • readystate
    • status
  • 复习了相关 api 的使用和注意事项。
  • 最让我惊喜的是:304状态码同步请求
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lazy_tomato

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值