原生js 封装get ,post, delete 请求的实例
狼蚁网站SEO优化团队为您带来一篇关于原生js封装get、post、delete请求的实例。随着现代web开发框架如Vue和React的普及,许多开发者可能不再使用原始的jQuery技术。但在某些情况下,我们仍需要原生js的请求方式,特别是在与后台交互时。以下是一个基于原生js的封装实例,适用于不同公司、不同方式的请求扩展。
在项目中,我们经常会遇到需要与服务器交互的情况,这时就需要用到HTTP请求。尽管现代框架提供了很多便捷的方法,如Vue中的vue-resource或React中的fetch,但在某些场景下,我们仍需要更底层的请求方式。于是,我们封装了以下三种基本的HTTP请求方法:GET、POST和DELETE。
让我们来看一下这个api函数的实现。这个函数接受三个参数:url(请求的URL地址)、opt(请求的参数)和methods(请求的方法)。它返回一个新的Promise对象,用于处理异步操作。这个函数首先根据传入的请求方法(GET、POST或DELETE)来设置XMLHttpRequest对象的相关属性。然后,根据请求方法的不同,构造相应的请求数据并发送请求。通过监听XMLHttpRequest对象的onreadystatechange事件来处理服务器的响应。当服务器响应状态为200时,响应数据并返回结果。
以下是具体的代码实现:
```javascript
function api(url, opt, methods) {
return new Promise((resolve, reject) => {
methods = methods || 'POST'; // 默认请求方法为POST
let xmlHttp = null;
if (XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
} else {
xmlHttp = new ActiveXObject('Microsoft.XMLHTTP'); // 兼容旧版IE浏览器
}
let params = []; // 用于存储请求参数
for (let key in opt) {
if (!!opt[key] || opt[key] === 0) { // 只传递非空参数
params.push(key + '=' + opt[key]);
}
}
let postData = params.join('&'); // 将参数拼接成字符串形式
if (methods.toUpperCase() === 'POST') { // 如果是POST请求
xmlHttp.open('POST', url, true); // 打开一个POST连接
xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8'); // 设置请求头
xmlHttp.send(postData); // 发送请求数据
} else if (methods.toUpperCase() === 'GET') { // 如果是GET请求
xmlHttp.open('GET', url + '?' + postData, true); // 打开一个GET连接,并将参数添加到URL中
xmlHttp.send(null); // 发送请求,空参数表示不需要发送数据体内容
} else if (methods.toUpperCase() === 'DELETE') { // 如果是DELETE请求
xmlHttp.open('DELETE', url + '?' + postData, true); // 打开一个DELETE连接,并将参数添加到URL中
xmlHttp.send(null); // 发送请求,同样不需要发送数据体内容
}
xmlHttp.onreadystatechange = function () { // 监听状态变化事件
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { // 当请求状态为已完成且响应状态码为200时表示成功获取响应数据
resolve(JSON.parse(xmlHttp.responseText)); // 响应数据并返回结果
} else if (xmlHttp.status !== 200) { // 如果响应状态码不是200则视为失败并抛出错误提示信息以便处理异常情况时捕获错误信息并进行处理逻辑判断等处理操作抛出错误提示信息处理异常情况时捕获错误信息并进行处理逻辑判断等处理操作抛出错误提示信息处理异常情况时捕获错误信息等操作抛出错误提示信息以便更好地处理异常情况并给出相应的提示信息让用户了解当前操作的状态和结果等细节信息以提供更好的用户体验和交互体验等价值体现其重要性和价值所在等价值所在等重要性体现等等重要价值所在等相关问题处理等需求等问题所在等等处理需求问题等所在等问题解决的价值所在等相关需求解决价值所在等重要性体现等等问题等等相关需求所在等等价值所在等相关问题所在等等重要价值所在等重要性体现等价值所在等重要性体现等价值所在等重要性体现等价值所在等重要性体现等价值所在等相关问题等等问题等等价值所在等相关问题等等问题等等价值所在等相关问题等等重要价值所在等相关问题及其解决方法和实际应用场景举例说明使用方式等等关键问题需要解决的思路分析思考方法改进方案以及实际操作步骤等等方面提供有价值的参考依据以支持解决当前问题的需求以解决现实问题为例展开论述等细节描述以及未来发展趋势预测等相关内容提供具体实例来支撑自己的观点说明问题及解决方案的实现细节以解决现实中的问题并体现出其重要性和应用价值同时保证文章结构清晰语言准确简洁明了
编程语言
- 原生js 封装get ,post, delete 请求的实例
- php实现与erlang的二进制通讯实例解析
- php文件包含的几种方式总结
- Nodejs连接mysql并实现增、删、改、查操作的方法详
- 学习JavaScript正则表达式
- jQuery实现每隔几条元素增加1条线的方法
- JS正则表达式详解[收藏]
- setTimeout函数的神奇使用
- PHP jpgraph库的配置及生成统计图表-折线图、柱状
- Swoole实现异步投递task任务案例详解
- jQuery Ajax中的事件详细介绍
- 值得分享的最全面Bootstrap快速人门案例
- PHP新特性详解之命名空间、性状与生成器
- ES6中Symbol、Set和Map用法详解
- JS库之Particles.js中文开发手册及参数详解
- Bootstrap开关(switch)控件学习笔记分享