封装ajax-3(通过promise内层封装)
2018-02-08 09:16
169 查看
let ajax = (function (window) { function uri(obj){ let arr=[]; if (obj && typeof obj === 'object') { for(let i in obj){ arr.push(encodeURIComponent(i)+'='+encodeURIComponent(obj[i])); } } return arr.join('&'); } return function (options) { return new Promise((resolve, reject) => { let _options = { method: 'GET', async: 'true', data: 'null' }; for (let i in options) { _options[i] = options[i]; } let xhr; if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } else { xhr = new ActiveXObject('Microsoft.XMLHttp'); } if (_options.method === 'GET') { _options.url = `${_options.url}?m=${Math.random()}&${_options.data}`; } else { _options.url = `${_options.url}?m=${Math.random()}`; } xhr.open(_options.method, _options.url, _options.async); _options.data = uri(_options.data); if (_options.method === 'GET') { xhr.send(_options.data); } else { xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.send(_options.data); } if (_options.async === false) { if (xhr.status === 200) { resolve(JSON.parse(xhr.responseText)); } else { reject(xhr.status); } } else { xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if (xhr.status === 200) { resolve(JSON.parse(xhr.responseText)); } else { reject(xhr.status); } } } } }) } })(window);
相关文章推荐
- 在dva中如何不通过yield发送封装的请求并且获取返回的promise对象中的数据
- WCF客户端搭建(通过自定义WCF Client封装)
- 微信小程序 es6-promise.js封装请求 处理异步进程
- 通过一道笔试题浅谈javascript中的promise对象
- 通过伽马矫正改变计算机屏幕亮度封装代码示例
- Promise封装ajax请求
- javascript 通过封装div方式弹出div窗体
- 微信小程序Http高级封装 es6 promise
- Retrofit简单封装使用--Post请求封装请求体、Get请求通过参数、map方式构建url
- Activiti之流程通过、驳回、会签、转办、中止、挂起等核心操作封装(Activiti5.9)
- Activiti之流程通过、驳回、会签、转办、中止、挂起等核心操作封装(Activiti5.9)
- xUtils怎样通过注解对FindViewById进行封装
- 利用装饰者模式通过层层封装以达到动态增强类的功能。
- 获取request参数并通过BeanUtil进行封装处理的参考工具类
- angularJS中的promise模式以及通过$q解决异步
- JS封装通过className获取元素的函数示例
- 通过结果集元数据将查询结果封装为Map
- 通过VB6将ASP编译封装成DLL组件最简教程 附全部工程源文件
- AOP:通过面向方面编程提高代码的封装和复用性(转&收藏)
- 通过反射自动封装表单字段