AJAX 03 XMLHttpRequest、Promise、封装简易版 axios
// 简易版 axios 请求封装
class SimpleAxios {
// 发送 GET 请求
static get(url, params) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open('GET', url + '?' + this.encodeParams(params), true);
xhr.onreadystatechange = () => {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300) {
resolve(JSON.parse(xhr.responseText));
} else {
reject(new Error(xhr.statusText));
}
}
};
xhr.onerror = () => reject(new Error('Network Error'));
xhr.send(null);
});
}
// 发送 POST 请求
static post(url, data) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange = () => {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300) {
resolve(JSON.parse(xhr.responseText));
} else {
reject(new Error(xhr.statusText));
}
}
};
xhr.onerror = () => reject(new Error('Network Error'));
xhr.send(JSON.stringify(data));
});
}
// 将参数对象转换为 URL 编码字符串
static encodeParams(params) {
return Object.keys(params)
.map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)
.join('&');
}
}
// 使用示例
SimpleAxios.get('https://api.example.com/data', { id: 123 })
.then(response => console.log(response))
.catch(error => console.error(error));
SimpleAxios.post('https://api.example.com/data', { name: 'John', age: 30 })
.then(response => console.log(response))
.catch(error => console.error(error));
这个简易版的 axios
封装了 GET 和 POST 请求,并使用 Promise 处理异步操作。这个示例提供了如何使用原生的 XMLHttpRequest
对象来发送请求的方法,并演示了如何封装一个简单的 HTTP 客户端以发送 HTTP 请求。
评论已关闭