什么是AJAX?
AJAX =Asynchronous JavaScript and XML(异步的 JavaScript 和 XML),是一种用于创建快速动态网页的技术。
封装ajax请求
function http({
url,
method='GET',
params={},
data={}
}) {
// 将method值转为大写
method = method.toUpperCase();
// 将参数拼接到url上
if(params) {
let jointString = null;
// id=xxx&name=xxx&
Object.keys(params).forEach(key=> {
jointString += `${key}=params[key]&`
})
// 将最后的&去掉
jointString = jointString.subString(0,jointString.length - 1);
url += url + '?' + jointString;
}
// 创建xhr实例
const request = new XMLHttpRequest();
request.open(method,url,true);//规定请求类型、url、是否异步请求
if(method == 'GET' || method == 'DELETE') {
request.send(); //将请求发送到服务器
} else if(method == 'POST' || method == 'PUT') {
request.setRequestHeader('content-type','application/json;charset=utf-8'); //设置请求头
request.send(JSON.stringify(data)); //将请求发送到服务器,携带参数仅用于POST请求
}
//每当 readyState 改变时,就会触发 onreadystatechange 事件
request.onreadystatechange = function() {
// readyState存着XMLHttpRequest的状态
// 0:请求未初始化
// 1:服务器连接已建立
// 2:请求已接收
// 3:请求处理中
// 4:请求已完成,且响应已就绪
if(request.readyState != 4) return;
// 请求完成返回promise对象
return new Promise((resolve,reject)=> {
const {status, statusText} = request;
// 状态码200~299之间都是请求成功
if(status>=200 && status <=299) {
const response = {
status,
statusText,
data: JSON.stringify(request.response)
};
resolve(data);
} else {
const response = {
status,
statusText,
};
reject(response);
}
})
}
}