用promise封装原生ajax, 实现axios
时间: 2024-03-12 09:50:08 浏览: 79
如何封装一个axios函数_Promises_axios
好的,下面是用 Promise 封装原生 Ajax 实现 Axios 的代码:
```javascript
function axios(config) {
return new Promise(function(resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.open(config.method, config.url, true);
xhr.onload = function() {
if (xhr.status >= 200 && xhr.status < 300) {
resolve(xhr.response);
} else {
reject(xhr.statusText);
}
};
xhr.onerror = function() {
reject(xhr.statusText);
};
if (config.headers) {
Object.keys(config.headers).forEach(function(key) {
xhr.setRequestHeader(key, config.headers[key]);
});
}
var params = config.params;
if (params && typeof params === 'object') {
params = Object.keys(params).map(function(key) {
return encodeURIComponent(key) + '=' + encodeURIComponent(params[key]);
}).join('&');
}
xhr.send(params);
});
}
```
这个函数接受一个配置对象,包含以下属性:
- `method`:请求方法,如 `'GET'`、`'POST'` 等。
- `url`:请求地址。
- `headers`:请求头,一个键值对对象,如 `{ 'Content-Type': 'application/json' }`。
- `params`:请求参数,一个键值对对象,如 `{ username: 'john', password: 'doe' }`。
这个函数返回一个 Promise 对象,成功时返回响应数据,失败时返回错误信息。在函数内部,我们使用原生 XMLHttpRequest 对象发送 Ajax 请求,并根据响应状态来决定 Promise 对象的状态。同时,我们也支持设置请求头和请求参数。
阅读全文