const ajax = function (obj) {
return new Promise((resolve, reject) => {
let method = obj.method || "GET";
let xhr;
// 创建xhr
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
} else {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
// 超时
xhr.ontimeout = function () {
reject({
errorType: "timeout_error",
xhr: xhr
})
};
// 错误
xhr.onerror = function () {
reject({
errorType: "error",
xhr: xhr
})
};
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300 || (xhr.status === 304)) {
resolve(xhr.responseText);
} else {
reject({
errorType: "error",
xhr: xhr
})
}
}
};
if (method === "POST") {
xhr.open("POST", obj.url, true);
xhr.responseType = "json";
xhr.setRequestHeader("Accept", "application/json");
xhr.send(obj.data);
} else {
let query = "";
for (let key in obj.data) {
query += `&${encodeURIComponent(key)}=${encodeURIComponent(obj.data[key])}`;
}
// 去掉query头的&符号
query.substring(1);
xhr.open("GET", obj.url + "?" + query, true);
xhr.send();
}
})
};
使用Promise封装ajax方法
最新推荐文章于 2022-03-09 17:50:29 发布