原生JS封装自己的AJAX
封装完写了个回调地狱,真是吐了,写不动了,分享一下代码吧
//封装ajax函数
function ajax(obj) {//指定提交方式的默认值obj.type = obj.type || 'get';//设置是否为异步,默认值为异步obj.async = obj.async || true;//设置数据的默认值obj.data = obj.data || null;//根据不同的浏览器创建XHR对象let xhr = null;if (window.XMLHttpRequest) {//非IE浏览器xhr = new XMLHttpRequest();} else {//IE浏览器xhr = new ActiveXObject('Microsoft.XMLHTTP');}//区分get和post,发送HTTP请求if (obj.type === 'post') {xhr.open(obj.type, obj.url, obj.async);xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");let data = toData(obj.data);xhr.send(data);} else {let url = obj.url + '?' + toData(obj.data);xhr.open(obj.type, url, obj.async);xhr.send();}//接收返回来的数据xhr.onreadystatechange = function () {if (xhr.readyState === 4) {if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {if (obj.success) {obj.success(JSON.parse(xhr.responseText));}}} else {if (obj.error) {obj.error(xhr.status);}}}
}//辅助函数,把传进来的对象拼接成url的字符串
function toData(obj) {if (obj === null) {return obj;}let arr = [];for (let i in obj) {let str = i + '=' + obj[i];arr.push(str);}return arr.join('&');
}
写不动是有原因的,看一下这个回调地狱,真的是太恶心了
为了解决回调地狱,ES6新增了Promise,下一篇就讲Promise
原生JS封装自己的AJAX相关推荐
- 原生JS封装Ajax插件(同域jsonp跨域)
2019独角兽企业重金招聘Python工程师标准>>> 抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax ...
- js 封装ajax方法吗,原生JS封装ajax方法
jquery框架的ajax方法固然好用,但是假如某天我们的项目不能引入jquery或项目需求很简单,没有很多交互功能,只需要ajax,这时引入jquery库会造成资源浪费,也会显得页面臃肿.这时我们就 ...
- H5移动端原生JS封装附件上传服务器
本文主要通过原生的js封装附件上传upload.js.可成功内嵌钉钉,ios和安卓端可正常使用,支持单个.多个附件上传. 一.业务需求 封装原生JS附件上传,动态创建附件列表,可对附件列表进行删除和新 ...
- 原生Js封装的弹出框-弹出窗口-页面居中-多状态可选
实现了一下功能: 1.title可自定义 可拖拽 2.width height可以自定义 3.背景遮罩和透明度可以自定义 4.可以自己编辑弹出框里的html 5.确定 取消按钮可选 调用方法: 1 P ...
- jq ajax请求php原声,原生JS与jQuery对AJAX的实现
原生JS与jQuery对AJAX的实现 一.定义 W3C里这么解释AJAX: AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). ...
- 原生js封装table组件
使用原生js封装自己的table组件. 思路是通过设置参数,生成对应的表格dom; 源码如下:(初步实现) var XUi = {// table组件tableDom:{common:function ...
- animate用法 js原生_原生JS封装animate运动框架的实例
如下所示: div { width: 100px; height: 100px; background-color: pink; position: absolute; left: 0; top: 5 ...
- 原生js封装cookie插件
最近迷上了react,用react模拟之前的系统,做登录的时候,发现需要用到cookie,之前用的跟vue搭配的VueCookie,我就在想啊,react应该也会有相应的cookie插件吧!百度一下, ...
- 原生js封装十字参考线插件(一)
需求来源: 拓扑图之机房平面图,显示机房长宽比例尺,房间内标注各种设备间距不易实现,特在机房平面图上层加一个十字参考线 横竖两条线垂直,在鼠标指针处交叉,显示鼠标指针坐标(相对机房平面图的坐标,不是相 ...
最新文章
- C语言中二维指针,C语言中怎样区分一维指针和二维指针?
- 57. Leetcode 257. 二叉树的所有路径 (二叉树-二叉树路径和)
- java学习类的笔记
- MySQL中如何约束和排序数据
- leetcode266. 回文排列
- 转载-做一个双向自豪的人
- python 2.7中urllib 2 与python 3.5中 urllib的区别。
- win10系统日志显示不可用sid_win10系统电脑修改sid安全标识符的操作方法
- 重拾JAVA之WinForm实战之(二)
- api.execScript
- 网站地图在线生成软件-只需要导入域名自动生成网站地图
- 小武与YOLOv3----优图代码
- 微信朋友如何找回 android,微信怎么恢复好友?简单几步轻松恢复!
- iPhone/iPad苹果设备型号对应常用名称列表(2022更新至iPhone 14 Pro Max | iPad Air 5)
- 教你从零做起谷歌Adsense。开户,过审核,过pin码达到稳定收益
- Arduino基础入门篇30—数字温度传感器DS18B20
- 电信管理局:2011推进三网融合走向深入
- fastadmin 使用switch 点击修改无反应 提示“未更新任何行”
- 十大排序算法入门(JAVA版)
- VB.NET CHART
热门文章
- COM编程之五 动静态链接
- 第30讲:如何爬app的数据
- 在linux中解压.tgz
- SOX 音频处理工具基本使用
- MySQL数据库的内连接,左外连接和右外连接查询
- LiveVideoStack成立5周年生日快乐!一路走来,感谢有你!
- map/set/multi_map/multi_set/unorder_map/unorder_set总结
- 巧用 Protobuf 反射来优化代码,拒做 PB Boy
- GIAC 2020 全球互联网架构大会演讲实录:基于TarsGo的微服务技术架构实践
- Nginx Rtmp Module - HLS切片和级联播放