封装完写了个回调地狱,真是吐了,写不动了,分享一下代码吧

//封装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相关推荐

  1. 原生JS封装Ajax插件(同域jsonp跨域)

    2019独角兽企业重金招聘Python工程师标准>>> 抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax ...

  2. js 封装ajax方法吗,原生JS封装ajax方法

    jquery框架的ajax方法固然好用,但是假如某天我们的项目不能引入jquery或项目需求很简单,没有很多交互功能,只需要ajax,这时引入jquery库会造成资源浪费,也会显得页面臃肿.这时我们就 ...

  3. H5移动端原生JS封装附件上传服务器

    本文主要通过原生的js封装附件上传upload.js.可成功内嵌钉钉,ios和安卓端可正常使用,支持单个.多个附件上传. 一.业务需求 封装原生JS附件上传,动态创建附件列表,可对附件列表进行删除和新 ...

  4. 原生Js封装的弹出框-弹出窗口-页面居中-多状态可选

    实现了一下功能: 1.title可自定义 可拖拽 2.width height可以自定义 3.背景遮罩和透明度可以自定义 4.可以自己编辑弹出框里的html 5.确定 取消按钮可选 调用方法: 1 P ...

  5. jq ajax请求php原声,原生JS与jQuery对AJAX的实现

    原生JS与jQuery对AJAX的实现 一.定义 W3C里这么解释AJAX: AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). ...

  6. 原生js封装table组件

    使用原生js封装自己的table组件. 思路是通过设置参数,生成对应的表格dom; 源码如下:(初步实现) var XUi = {// table组件tableDom:{common:function ...

  7. animate用法 js原生_原生JS封装animate运动框架的实例

    如下所示: div { width: 100px; height: 100px; background-color: pink; position: absolute; left: 0; top: 5 ...

  8. 原生js封装cookie插件

    最近迷上了react,用react模拟之前的系统,做登录的时候,发现需要用到cookie,之前用的跟vue搭配的VueCookie,我就在想啊,react应该也会有相应的cookie插件吧!百度一下, ...

  9. 原生js封装十字参考线插件(一)

    需求来源: 拓扑图之机房平面图,显示机房长宽比例尺,房间内标注各种设备间距不易实现,特在机房平面图上层加一个十字参考线 横竖两条线垂直,在鼠标指针处交叉,显示鼠标指针坐标(相对机房平面图的坐标,不是相 ...

最新文章

  1. C语言中二维指针,C语言中怎样区分一维指针和二维指针?
  2. 57. Leetcode 257. 二叉树的所有路径 (二叉树-二叉树路径和)
  3. java学习类的笔记
  4. MySQL中如何约束和排序数据
  5. leetcode266. 回文排列
  6. 转载-做一个双向自豪的人
  7. python 2.7中urllib 2 与python 3.5中 urllib的区别。
  8. win10系统日志显示不可用sid_win10系统电脑修改sid安全标识符的操作方法
  9. 重拾JAVA之WinForm实战之(二)
  10. api.execScript
  11. 网站地图在线生成软件-只需要导入域名自动生成网站地图
  12. 小武与YOLOv3----优图代码
  13. 微信朋友如何找回 android,微信怎么恢复好友?简单几步轻松恢复!
  14. iPhone/iPad苹果设备型号对应常用名称列表(2022更新至iPhone 14 Pro Max | iPad Air 5)
  15. 教你从零做起谷歌Adsense。开户,过审核,过pin码达到稳定收益
  16. Arduino基础入门篇30—数字温度传感器DS18B20
  17. 电信管理局:2011推进三网融合走向深入
  18. fastadmin 使用switch 点击修改无反应 提示“未更新任何行”
  19. 十大排序算法入门(JAVA版)
  20. VB.NET CHART

热门文章

  1. COM编程之五 动静态链接
  2. 第30讲:如何爬app的数据
  3. 在linux中解压.tgz
  4. SOX 音频处理工具基本使用
  5. MySQL数据库的内连接,左外连接和右外连接查询
  6. LiveVideoStack成立5周年生日快乐!一路走来,感谢有你!
  7. map/set/multi_map/multi_set/unorder_map/unorder_set总结
  8. 巧用 Protobuf 反射来优化代码,拒做 PB Boy
  9. GIAC 2020 全球互联网架构大会演讲实录:基于TarsGo的微服务技术架构实践
  10. Nginx Rtmp Module - HLS切片和级联播放