封装ajax
//通过url获取数据
_getData = ({
url,
para={},
contentType,
beforeSend,
type="POST",
}) => {
console.log(para, 'para')
if (!url) throw Error('the url is required');
return new Promise((resolve, reject) => {
let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {
var response = typeof xhr.response === 'string' ? JSON.parse(xhr.response) : xhr.response;
resolve(response);
} else {
reject(xhr.response);
}
}
}
//拼接参数
function formatParams(data){
if(typeof data === 'string'){
//如果传入的是个字符串就直接发送
return data;
}
var arr=[];
for(var name in data){
arr.push(encodeURIComponent(name)+"="+encodeURIComponent(data[name]));
}
// arr.push(("v="+Math.random()).replace(".",""));
return arr.join("&");
}
if(type.toUpperCase() === 'GET' || type.toUpperCase() === 'DELETE'){
xhr.open(type, Object.keys(para).length > 0 ? (url+'?'+formatParams(para)) : url, true);
//这里可以在发送请求之前设置请求头
beforeSend && beforeSend(xhr);
if (contentType) {
xhr.setRequestHeader('Content-Type', contentType);
}
xhr.send(null);
}else{
if(type.includes('post')){
type = 'POST';
}
xhr.open(type, url, true);
//这里可以在发送请求之前设置请求头
beforeSend && beforeSend(xhr);
//处理请求数据时传入的参数
let formData = null;
if (contentType) {
formData = JSON.stringify(para);
xhr.setRequestHeader('Content-Type', contentType);
} else {
if(typeof para === 'string'){
//如果传入的是个字符串就直接发送
formData = para;
}else{
formData = new FormData();
for (let [key, value] of Object.entries(para)) {
if (value) {
formData.append(key, value);
}
}
}
}
xhr.send(formData);
}
});
}