ajax
基础用法
使用xhr需要对构造函数XMLHttpRequst
实例化
const xhr = new XMLHttpRequst()
如何在发送消息之前,我们需要先调用open
方法,它接收三个参数
- 请求的方法
- 请求的url
- 是否异步 Boolean
xhr.open('get',"http://example.com",true)
然后就可以调用send
发送数据了,接收一个参数
xhr.send({a: 1})
// 如果要发送空数据,则传null
xhr.send(null)
接收到响应后,xhr会填充status
属性,它表示响应的状态码,可以通过它来判断响应的状态。
此外xhr对象还有另一个常用的属性readyState
,它有5个可能的值
- 0 未调用open
- 1 调用了open方法,但是没调用send方法
- 2 调用了send,未接收到响应
- 3 正在接收响应
- 4 完成接收
每当readyState变化时,都会触发readystatechange事件。
xhr.onreadystatechange = function(){
if(xhr.readyState === 4){
// 处理
}
}
如果在异步请求的时候想停止,可以调用xhr的abort()
方法。
调用这个方法后,XHR对象会停止触发事件,并阻止访问这个对象上任何与响应相关的属性。中断请求后,应该取消对XHR对象的引用。
设置请求头
可以通过getResponseHeader
来获取某个http响应头字段
可以通过getAllResponseHeader
来获取所有的http响应头字段
可以通过setRequestHeader
来添加http请求头字段
GET和POST方法
如果请求是get方法,那么参数需要自己加到url
中。
如果请求是post方法
- 默认发送是
application/JSON
格式 - 如果要改为
form-data
格式,需要- 先设置请求头
content-type
为application/x-www-form-urlencoded
- 改变参数格式为
FormData
- 先设置请求头
FormData
现代Web应用程序中经常需要对表单数据进行序列化,因此XMLHttpRequest Level 2新增了FormData类型。FormData类型便于表单序列化,也便于创建与表单类似格式的数据然后通过XHR发送。
const data = new FormData()
data.append('name',"张三")
// 也可以直接传入表单
超时
xhr有个timeout属性,用于设置超时时间,如果超时未得到响应,就会触发ontimeout事件。
xhr.timeout = 5000
xhr.ontimeout = function(){
alert('超时了!')
}