Skip to content

xhr-promisify

npm package

NPM versionNPM Downloadsjsdelivr

轻量级的 Promise 化 XHR 工具库,将传统的 XMLHttpRequest 封装为 Promise 接口,简化异步请求开发。


安装

bash
npm add xhr-promisify
bash
pnpm add xhr-promisify
bash
yarn add xhr-promisify
html
<script src="https://cdn.jsdelivr.net/npm/xhr-promisify/dist/index.umd.min.js"></script>
<script>
  const { ajax } = XhrPromisify;
  // GET 请求
  ajax({
    url: 'https://api.example.com/data',
    method: 'GET'
  })
  .then(response => {
    console.log('响应数据:', response);
  })
  .catch(error => {
    console.error('请求失败:', error);
  });
</script>

快速上手

基础用法

javascript
import { ajax } from 'xhr-promisify';

// GET 请求
ajax({
  url: 'https://api.example.com/data',
  method: 'GET'
})
.then(response => {
  console.log('响应数据:', response);
})
.catch(error => {
  console.error('请求失败:', error);
});

// 简洁写法(async/await)
async function fetchData() {
  try {
    const response = await ajax({ url: '/api/data' });
    console.log(response);
  } catch (error) {
    console.error(error);
  }
}

API 文档

ajax(options: AjaxRequestOptions | string): Promise<AjaxResponse>

发送 HTTP 请求并返回 Promise。

参数

参数名类型必填说明
urlstring✔️请求地址
methodstring请求方法(默认 GET
dataobject请求体(POST/PUT 等方法自动序列化为 JSON)
timeoutnumber超时时间(毫秒,默认 30000
headersobject自定义请求头
signalAbortSignal通过 AbortController 中止请求
queryobjectURL 查询参数(自动编码)
authobject基础认证({ username, password }
withCredentialsboolean是否携带凭证(如 cookies)
responseTypestring响应类型(如 jsonblob
validateStatus(status: number) => boolean自定义成功状态码判断逻辑

返回值 (AjaxResponse)

typescript
interface AjaxResponse {
  status: number;        // HTTP 状态码
  statusText: string;    // 状态描述
  headers: Record<string, string>; // 响应头
  data: any;             // 解析后的响应数据
  request: XMLHttpRequest; // 原生 XHR 对象
}

错误类型 (AjaxError)

所有错误均抛出 AjaxError 类型,包含以下属性:

typescript
class AjaxError extends Error {
  code: string; // 错误代码(如 `ERR_NETWORK`)
  status?: number; // HTTP 状态码(若返回)
  statusText?: string; // HTTP 状态码文本(若返回)
  data?: any; // 响应数据(若返回)
  request?: XMLHttpRequest; // 原始请求对象(若返回)
}

导出的错误代码

错误代码描述
ABORT_ERR请求被中止
ERR_NETWORK网络错误(如 DNS 失败)
ERR_HTTP_REQUEST_TIMEOUT请求超时
ERR_BAD_REQUESTHTTP 4xx 状态码错误
ERR_BAD_RESPONSEHTTP 5xx 状态码错误

高级用法

中止请求

javascript
const controller = new AbortController();
const { signal } = controller;

ajax({
  url: '/api/long-polling',
  signal
}).then(...);

// 主动中止请求
controller.abort();

自定义请求头

javascript
ajax({
  url: '/api/protected',
  headers: {
    'Authorization': 'Bearer your_token'
  }
});

处理进度事件

javascript
ajax({
  url: '/api/upload',
  onUploadProgress: (event) => {
    console.log(`上传进度: ${event.loaded}/${event.total}`);
  },
  onDownloadProgress: (event) => {
    console.log(`下载进度: ${event.loaded}/${event.total}`);
  }
});

错误处理

所有异常均抛出 AjaxError 对象,包含以下属性:

typescript
class AjaxError extends Error {
  code: string; // 错误代码(如 `ERR_NETWORK`)
  status?: number; // HTTP 状态码(若返回)
  statusText?: string; // HTTP 状态码文本(若返回)
  data?: any; // 响应数据(若返回)
  request?: XMLHttpRequest; // 原始请求对象(若返回)
}

错误类型

错误代码类型描述
ABORT_ERRAjaxError请求被手动中止
ERR_NETWORKAjaxError网络错误(如 DNS 解析失败)
ERR_HTTP_REQUEST_TIMEOUTAjaxError请求超时
ERR_BAD_REQUESTAjaxErrorHTTP 状态码 4xx 错误
ERR_BAD_RESPONSEAjaxErrorHTTP 状态码 5xx 错误

浏览器支持

ChromeFirefoxSafariOperaEdge
Latest ✔Latest ✔Latest ✔Latest ✔Latest ✔

Last updated: