AJAX 是 Asynchronous JavaScript And XML 的简称,它允许我们在不刷新整个页面的情况下,就可以异步获取数据,并更新页面的部分内容。
步骤
1. 创建 XMLHttpRequest 对象
var request = new XMLHttpRequest()
2. 设置请求的方式和地址
创建异步对象后,通过 open() 方法设置ajax请求的方式和请求地址。格式:request.open('GET/Post', '/XXX' , true)
第一个参数:请求的类型;GET 还是 POST
第二个参数:请求的文件地址url
第三个参数:设置请求方法是不是异步async,true为异步,false为同步。但是AJAX存在的意义就是发起异步请求,所以第三个参数永远传true,默认不填即为true。
3. 发送请求
通过异步对象的send()发送请求
request.send()
特别注意的是:如果发送POST请求,请使用setRequestHeader()来添加HTTP请求头,并在send方法中传递要发送的数据:
request.open("POST", "/xxx", true)
request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
request.send(data);
4. 通过onreadystatechange监听状态变化
onreadystatechange可以监听异步对象请求状态码 readyState 的改变,每当 readyState 改变时,就会触发 onreadystatechange 事件。
当 readyState 变为4时,表示当前状态是请求完毕的状态。下面是 XMLHttpRequest.readyState 的状态码:
| 值 | 状态 | 描述 |
|---|---|---|
0 | UNSENT | 代理被创建,但尚未调用 open() 方法。 |
1 | OPENED | open() 方法已经被调用。 |
2 | HEADERS_RECEIVED | send() 方法已经被调用,并且头部和状态已经可获得。 |
3 | LOADING | 下载中;responseText 属性已经包含部分数据。 |
4 | DONE | 下载操作已完成。 |
同时当 http 的响应码status为200到300之间(包括200和300)或为304时,表示 ajax 请求成功。否则表示不成功。
实现代码
const ajax = (method, url, data, success, fail)=>{
var request = new XMLHttpRequest()
request.open(method, url)
request.onreadystatechange = function(){
if(request.readyState === 4){
if(request.status >= 200 && request.status < 300 || request.status === 304){
success(request)
}else{
fail(request)
}
}
}
request.send(JSON.stringify(data))
}