前端中对于ajax的使用越来越多,原生的ajax需要考虑兼容性,写法也较为复杂,所以打算自己封装一个。
原生ajax
原生ajax的使用可以分为4个步骤(3的位置不是固定的,只要在1后面即可):
- 新建一个
XHR对象
- 用
open()
方法指定请求方法,请求资源和是否异步 - 为XHR对象绑定一个
onreadystatechange函数
- 用
send()
发送请求
下面一一介绍:
新建XHR对象
创建XHR对象很简单,一行代码搞定:
考虑要兼容IE浏览器,得像下面这样写:
指定open()方法
当我们要跟服务器交互的时候,就需要像正常的http请求那样指定请求方式和请求的资源,这里XHR提供了一个open()方法,它可以接受3个参数:
绑定回调函数
当我们获取到资源时,我们希望能够通过回调的方式来处理它,这时就需要指定onreadystatechange方法了。在这之前,我们需要先了解两个东西,readyState
和status
。
首先是redayState,它一共有5个可能的值,代表的是请求的建立
到成功接受响应
的一系列过程:
每当xhr对象的readyState改变
时,onreadystatechange事件就会被触发
,从单词也很明显能看出了把!这样xhr请求的过程中,onreadystatechange事件就会被触发5次,一般我们只会判断readyState是否为4,因为这时候我们已经拿到了服务器的返回的信息(可能是资源也可能是其他)。
但是拿到了响应信息并不代表我们的请求就成功了,与服务器交互的结果有可能是404页面未找到,也有可能是500服务器内部错误等其他情况,这时候就需要通过另一个判断条件–status
来判断了
常见的状态码有这些:
- 200 请求成功
- 301 永久重定向
- 302 临时重定向
- 304 使用缓存(条件请求If-Modified-Since)
- 400 请求出现语法错误
- 401 用户未认证(不能靠这个状态码来确定用户是否认证)
- 403 资源不可用
- 404 页面未找到
- 500 服务器内部错误
当readyState为4且status为200时,我们就可以提取数据了,提取数据可以通过2个属性:
调用send()发送请求
当我们使用post请求时,要发给服务端的数据要通过’&’连接放在send()方法里
|
|
ajax封装
整合以上代码并添加一些判断以及处理函数,我们自己封装的ajax就成了!