function ajax(options) {
const { url, data, type, success, error, timeout, header } = options;
let xhr = null;
//1、创建XMLHttpRequest
if (XMLHttpRequest) {
xhr = new XMLHttpRequest();
} else {
xhr = new ActiveXObject();
}
//2、判断是get还是post请求
if (type.toLowerCase() === 'get') {
xhr.open('get', `${url}?${formatData(data)}`, true);
xhr.send();
} else if (type.toLowerCase() === 'post') {
xhr.open('post', url, true);
xhr.send(data);
xhr.setRequestHeader(header)
}
//3、监听事件
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
success && success(xhr.responseText);
} else {
error && error(xhr);
}
}
//请求时间限制
setTimeout(() => {
xhr.abort();
}, timeout);
}
//data的处理
function formatData(data) {
let res = '';
for (let key in data) {
res += key + '=' + encodeURI(data[key]) + '&'
}
res += 'time=' + new Date().getTime();
console.log(res);
return res;
}
function request(options) {
return new Promise((resolve, reject) => {
ajax({
...options,
success: resolve,
// error: reject,
});
})
}
request({
url: './data.json',
data: {
a: 1,
b: '中文'
},
type: 'GET',
timeout: 5000,
header: {
'content-type': 'application/json'
}
}).then(res=>{
console.log('res::',res);
}).catch(req=>{
console.log('req::',req);
})