xhr终极轻量级XMLHttpRequest封装库 - ICAgICAgICAgICAg让浏览器端HTTP请求更简单高效的完整指南【免费下载链接】xhrA small xhr wrapper项目地址: https://gitcode.com/gh_mirrors/xh/xhr在浏览器端进行HTTP请求是前端开发中的基础需求而xhr库正是为了解决这个问题而生的终极解决方案。这个轻量级XMLHttpRequest封装库让开发者能够以更简单、更高效的方式处理浏览器端的HTTP请求同时保持与Node.js中request库的API兼容性。为什么选择xhr库 核心优势与特点xhr库提供了以下关键特性使其成为浏览器端HTTP请求的首选工具极简API设计提供与Node.js request库相似的API降低学习成本跨浏览器兼容完美支持IE8及所有现代浏览器轻量级体积不依赖其他大型库保持代码精简TypeScript支持提供完整的类型定义文件 index.d.tsJSON自动处理内置JSON序列化与反序列化功能 快速安装与配置安装xhr库非常简单只需要一行命令npm install xhr对于使用Webpack或Browserify的项目可以通过简单的配置让xhr替代request模块Browserify配置在package.json中添加browser: { request: xhr }Webpack配置resolve: { alias: { request$: xhr } } 快速入门指南基础使用示例使用xhr库发送HTTP请求非常简单直观const xhr require(xhr); xhr({ method: POST, body: JSON.stringify({ name: John }), uri: /api/users, headers: { Content-Type: application/json } }, function (err, resp, body) { if (err) { console.error(请求失败:, err); return; } console.log(状态码:, resp.statusCode); console.log(响应数据:, body); });便捷的方法别名xhr库提供了HTTP方法的便捷别名让代码更加简洁// GET请求 xhr.get(/api/data, callback); // POST请求 xhr.post(/api/users, { name: Alice }, callback); // PUT请求 xhr.put(/api/users/1, { name: Bob }, callback); // DELETE请求注意方法名为del xhr.del(/api/users/1, callback); 高级功能详解JSON自动处理xhr库内置了JSON处理功能可以自动序列化和反序列化JSON数据// 自动设置Content-Type为application/json // 并自动序列化请求体 xhr({ method: POST, uri: /api/data, json: true, body: { key: value } }, callback);跨域请求支持对于需要处理跨域请求的场景xhr提供了完整的解决方案xhr({ uri: https://api.example.com/data, withCredentials: true, // 携带凭证 useXDR: true // 针对IE8/9的特殊处理 }, callback);超时设置与错误处理xhr({ uri: /api/slow-endpoint, timeout: 5000, // 5秒超时 }, function(err, resp, body) { if (err err.code ETIMEDOUT) { console.log(请求超时); } }); 响应对象结构xhr库的响应对象包含了丰富的HTTP响应信息属性类型描述bodyObject/String响应体内容statusICAgICAgICAgICAgCodeNumberHTTP状态码methodString请求方法headersObject响应头键名已转为小写urlString请求URLrawRequestXMLHttpRequest原始XHR对象️ 错误处理最佳实践网络错误处理xhr({ uri: /api/data }, function(err, resp, body) { if (err) { // 网络错误或超时 console.error(网络错误:, err.message); return; } if (resp.statusCode 400) { // HTTP错误 console.error(HTTP错误:, resp.statusCode); return; } // 成功处理 console.log(成功:, body); });自定义错误处理function makeRequest(options) { return new Promise((resolve, reject) { xhr(options, (err, resp, body) { if (err) { reject(new Error(请求失败: ${err.message})); return; } if (resp.statusCode 400) { reject(new Error(HTTP错误 ${resp.statusCode})); return; } resolve({ data: body, response: resp }); }); }); }ICAgICAgICAgICAg════════════════ICAgICAgICAgICAg--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ICAgICAgICAgICAg与测试forEachArray函数在 index.js 中x and̯ICAgICAgICAgICAgWikimedia Commons⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ICAgICAgICAgICAg提供了便捷的方法别名生成功能forEachArray([get, put, post, patch, head, delete], function(method) { createXHR[method delete ? del : method] function(uri, options, callback) { options initParams(uri, options, callback) options.method method.toUpperCase() return _createXHR(options) } })AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA which provides a)).## 实际应用场景 ### 场景1表单提交 javascript // 提交表单数据 xhr.post(/api/submit-form, { json: true, body: { username: user123, email: userexample.com, preferences: { theme: dark, notifications: true } } }, function(err, resp, body) { if (resp.statusCode 200) { console.log(提交成功:, body.message); } });场景2文件上传// 上传文件需要FormData const formData new FormData(); formData.append(file, fileInput.files[0]); xhr({ method: POST, uri: /api/upload, body: formData, headers: { // FormData会自动设置Content-Type } }, function(err, resp, body) { // 处理上传结果 });场景3轮询请求function pollForUpdates() { xhr.get(/api/updates, function(err, resp, body) { if (!err resp.statusCode 200) { // 处理更新 console.log(收到更新:, body); } // 继续轮询 setTimeout(pollForUpdates, 5000); }); } 性能优化建议1.请求合并对于多个相关请求考虑合并为单个请求以减少HTTP连接数。2.缓存策略利用浏览器缓存机制合理设置缓存头xhr({ uri: /api/data, headers: { Cache-Control: max-age3600 // 缓存1小时 } }, callback);3.连接复用确保使用HTTP/2时xhr库能充分利用多路复用特性。 总结xhr库作为轻量级XMLHttpRequest封装库提供了简单、高效、跨浏览器的HTTP请求解决方案。无论是简单的GET请求还是复杂的AJAX交互xhr都能提供一致的API体验。主要优势总结✅ 极简API学习成本低✅ 跨浏览器兼容IE8✅ 与Node.js request库API兼容✅ 内置JSON处理✅ TypeScript友好✅ 轻量级无依赖通过使用xhr库开发者可以专注于业务逻辑而不是浏览器兼容性问题大大提升了前端开发效率和代码质量。想要开始使用xhr库只需运行npm install xhr即可体验这个强大的HTTP请求工具【免费下载链接】xhrA small xhr wrapper项目地址: https://gitcode.com/gh_mirrors/xh/xhr创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
xhr:终极轻量级XMLHttpRequest封装库 - ICAgICAgICAgICAg让浏览器端HTTP请求更简单高效的完整指南
发布时间:2026/6/17 7:04:17
xhr终极轻量级XMLHttpRequest封装库 - ICAgICAgICAgICAg让浏览器端HTTP请求更简单高效的完整指南【免费下载链接】xhrA small xhr wrapper项目地址: https://gitcode.com/gh_mirrors/xh/xhr在浏览器端进行HTTP请求是前端开发中的基础需求而xhr库正是为了解决这个问题而生的终极解决方案。这个轻量级XMLHttpRequest封装库让开发者能够以更简单、更高效的方式处理浏览器端的HTTP请求同时保持与Node.js中request库的API兼容性。为什么选择xhr库 核心优势与特点xhr库提供了以下关键特性使其成为浏览器端HTTP请求的首选工具极简API设计提供与Node.js request库相似的API降低学习成本跨浏览器兼容完美支持IE8及所有现代浏览器轻量级体积不依赖其他大型库保持代码精简TypeScript支持提供完整的类型定义文件 index.d.tsJSON自动处理内置JSON序列化与反序列化功能 快速安装与配置安装xhr库非常简单只需要一行命令npm install xhr对于使用Webpack或Browserify的项目可以通过简单的配置让xhr替代request模块Browserify配置在package.json中添加browser: { request: xhr }Webpack配置resolve: { alias: { request$: xhr } } 快速入门指南基础使用示例使用xhr库发送HTTP请求非常简单直观const xhr require(xhr); xhr({ method: POST, body: JSON.stringify({ name: John }), uri: /api/users, headers: { Content-Type: application/json } }, function (err, resp, body) { if (err) { console.error(请求失败:, err); return; } console.log(状态码:, resp.statusCode); console.log(响应数据:, body); });便捷的方法别名xhr库提供了HTTP方法的便捷别名让代码更加简洁// GET请求 xhr.get(/api/data, callback); // POST请求 xhr.post(/api/users, { name: Alice }, callback); // PUT请求 xhr.put(/api/users/1, { name: Bob }, callback); // DELETE请求注意方法名为del xhr.del(/api/users/1, callback); 高级功能详解JSON自动处理xhr库内置了JSON处理功能可以自动序列化和反序列化JSON数据// 自动设置Content-Type为application/json // 并自动序列化请求体 xhr({ method: POST, uri: /api/data, json: true, body: { key: value } }, callback);跨域请求支持对于需要处理跨域请求的场景xhr提供了完整的解决方案xhr({ uri: https://api.example.com/data, withCredentials: true, // 携带凭证 useXDR: true // 针对IE8/9的特殊处理 }, callback);超时设置与错误处理xhr({ uri: /api/slow-endpoint, timeout: 5000, // 5秒超时 }, function(err, resp, body) { if (err err.code ETIMEDOUT) { console.log(请求超时); } }); 响应对象结构xhr库的响应对象包含了丰富的HTTP响应信息属性类型描述bodyObject/String响应体内容statusICAgICAgICAgICAgCodeNumberHTTP状态码methodString请求方法headersObject响应头键名已转为小写urlString请求URLrawRequestXMLHttpRequest原始XHR对象️ 错误处理最佳实践网络错误处理xhr({ uri: /api/data }, function(err, resp, body) { if (err) { // 网络错误或超时 console.error(网络错误:, err.message); return; } if (resp.statusCode 400) { // HTTP错误 console.error(HTTP错误:, resp.statusCode); return; } // 成功处理 console.log(成功:, body); });自定义错误处理function makeRequest(options) { return new Promise((resolve, reject) { xhr(options, (err, resp, body) { if (err) { reject(new Error(请求失败: ${err.message})); return; } if (resp.statusCode 400) { reject(new Error(HTTP错误 ${resp.statusCode})); return; } resolve({ data: body, response: resp }); }); }); }ICAgICAgICAgICAg════════════════ICAgICAgICAgICAg--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ICAgICAgICAgICAg与测试forEachArray函数在 index.js 中x and̯ICAgICAgICAgICAgWikimedia Commons⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ICAgICAgICAgICAg提供了便捷的方法别名生成功能forEachArray([get, put, post, patch, head, delete], function(method) { createXHR[method delete ? del : method] function(uri, options, callback) { options initParams(uri, options, callback) options.method method.toUpperCase() return _createXHR(options) } })AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA which provides a)).## 实际应用场景 ### 场景1表单提交 javascript // 提交表单数据 xhr.post(/api/submit-form, { json: true, body: { username: user123, email: userexample.com, preferences: { theme: dark, notifications: true } } }, function(err, resp, body) { if (resp.statusCode 200) { console.log(提交成功:, body.message); } });场景2文件上传// 上传文件需要FormData const formData new FormData(); formData.append(file, fileInput.files[0]); xhr({ method: POST, uri: /api/upload, body: formData, headers: { // FormData会自动设置Content-Type } }, function(err, resp, body) { // 处理上传结果 });场景3轮询请求function pollForUpdates() { xhr.get(/api/updates, function(err, resp, body) { if (!err resp.statusCode 200) { // 处理更新 console.log(收到更新:, body); } // 继续轮询 setTimeout(pollForUpdates, 5000); }); } 性能优化建议1.请求合并对于多个相关请求考虑合并为单个请求以减少HTTP连接数。2.缓存策略利用浏览器缓存机制合理设置缓存头xhr({ uri: /api/data, headers: { Cache-Control: max-age3600 // 缓存1小时 } }, callback);3.连接复用确保使用HTTP/2时xhr库能充分利用多路复用特性。 总结xhr库作为轻量级XMLHttpRequest封装库提供了简单、高效、跨浏览器的HTTP请求解决方案。无论是简单的GET请求还是复杂的AJAX交互xhr都能提供一致的API体验。主要优势总结✅ 极简API学习成本低✅ 跨浏览器兼容IE8✅ 与Node.js request库API兼容✅ 内置JSON处理✅ TypeScript友好✅ 轻量级无依赖通过使用xhr库开发者可以专注于业务逻辑而不是浏览器兼容性问题大大提升了前端开发效率和代码质量。想要开始使用xhr库只需运行npm install xhr即可体验这个强大的HTTP请求工具【免费下载链接】xhrA small xhr wrapper项目地址: https://gitcode.com/gh_mirrors/xh/xhr创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考