网络请求工具
Transport 是对浏览器 Fetch API 与 XMLHttpRequest 的轻量封装。使用它时,只需按“配置请求 → 注册回调 → 发送请求”的顺序编写,即可用统一方式处理数据、Cookie、上传和异常。
先了解一次请求的流程
1. GB.Transport()创建一条独立请求,并开始链式配置。2. setUrl / setParam设置接口地址与需要提交的参数。3. success / error / catch分别处理成功、HTTP 状态错误和网络异常。4. get / post / put / delete最后调用请求方法,配置才会真正发送。每次请求建议重新调用 GB.Transport() 创建实例,避免不同接口之间的参数、请求头或回调相互影响。
安装与引入
浏览器直接引入
在业务脚本之前引入文件,引入后可直接使用全局的 GB.Transport()。
<script src="https://cloud.m775.net/js/transport.js"></script>
npm 项目
npm i @gentbo/transport
import '@gentbo/transport';
最快可用的示例
下面的代码向登录接口发送 JSON 数据,并在成功、失败和完成时分别处理结果。可以直接复制后替换 URL 与参数。
GB.Transport()
.setUrl('/api/login')
.setRequestType('JSON')
.setParam({
username: 'admin',
password: '123456'
})
.success(response => {
console.log('登录结果:', response.body);
})
.error((code, response) => {
console.warn('接口返回错误状态:', code, response);
})
.catch(error => {
console.error('网络或超时异常:', error);
})
.complete(() => {
console.log('本次请求已结束');
})
.post();
选择请求方式
.get()读取数据。通常只需设置地址;需要传参时可先使用 .setParam()。.post()创建或提交数据,是表单提交最常用的方式。.put()更新已有数据,例如修改用户信息。.delete()删除数据,例如按 ID 删除一条记录。// 查询用户列表
GB.Transport().setUrl('/user/list').get();
// 删除指定用户
GB.Transport()
.setUrl('/user/delete')
.setParam({ id: 1 })
.delete();
提交参数与数据格式
.setParam(object) 用于整体设置参数;如果只是补充一个字段,使用 .addParam(key, value) 更方便。
JSONapplication/json。适合大多数前后端接口,也是 API 请求的常用格式。QUERYapplication/x-www-form-urlencoded。适合普通键值对表单数据。FORMmultipart/form-data。上传文件时使用。XMLtext/xml。用于需要 XML 协议的旧系统或特定接口。GB.Transport()
.setUrl('/user/create')
.setRequestType('JSON')
.setParam({ username: 'admin', age: 18 })
.addParam('role', 'editor')
.post();
响应格式可通过 .setResponseType('JSON') 指定。未设置时,响应格式默认跟随请求格式。
请求头、Cookie 与超时
.setHeader(object)一次设置多个请求头,例如鉴权 Token。Header 名称会自动转为大写。.addHeader(key, value)添加一个请求头。.autoCookie(mode)0 不发送、1 同源发送、2 跨域发送 Cookie。.setCookie(object)设置 Cookie;也可用 .addCookie(key, value) 添加一个字段。.setTimeout(seconds)设置超时时间,单位为秒;默认值为 30 秒。GB.Transport()
.setUrl('/api/profile')
.setHeader({ Authorization: 'Bearer token' })
.autoCookie(1)
.setTimeout(15)
.get();
文件上传
上传文件时,设置请求格式为 FORM,然后通过 .setFile() 传入文件对象。多个文件字段可使用 .addFile(name, file) 追加。
const image = document.querySelector('[name="image"]').files[0];
GB.Transport()
.setUrl('/upload')
.setRequestType('FORM')
.setFile({ image })
.success(response => {
console.log('文件地址:', response.body);
})
.post();
如何处理返回结果
.before(data)请求发送前执行,适合显示加载状态或检查发送数据。.success(response)服务端正常响应时执行,应从 response.body 读取业务数据。.error(code, response)服务器返回 HTTP 错误状态时执行,例如 403、404、500。.catch(error)网络不可用、请求超时等异常时执行。.complete(response)无论成功或失败都会执行,适合关闭加载状态。成功响应使用统一结构,因此业务代码通常只需要读取 body:
{
header: {}, // 服务端响应头
cookie: {}, // 解析后的 Cookie
body: null // 服务端返回的业务数据
}
Fetch 与 XHR 的选择
默认 type: 'auto':异步请求自动使用 Fetch,同步请求自动使用 XMLHttpRequest。绝大多数业务保持默认即可;只有兼容旧接口或需要明确控制实现时才指定类型。
// 强制使用 Fetch
.type('fetch')
// 强制使用 XMLHttpRequest
.type('xhr')
// 同步请求仅支持 XMLHttpRequest
.async(false)