javascript系列之使用Promise封装ajax
来源:互联网 发布:java反射 在什么场景用 编辑:程序博客网 时间:2024/06/11 16:37
//调用函数 ajax({ url: 'your request url', method: 'get', async: true, timeout: 1000, data: { test: 1, aaa: 2 } }).then( res => console.log('请求成功: ' + res), err => console.log('请求失败: ' + err) ) //重点。。。函数封装function ajax (options) { let url = options.url const method = options.method.toLocaleLowerCase() || 'get' const async = options.async != false // default is true const data = options.data const xhr = new XMLHttpRequest() if (options.timeout && options.timeout > 0) { xhr.timeout = options.timeout } return new Promise ( (resolve, reject) => { xhr.ontimeout = () => reject && reject('请求超时') xhr.onreadystatechange = () => { if (xhr.readyState == 4) { if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) { resolve && resolve(xhr.responseText) } else { reject && reject() } } } xhr.onerror = err => reject && reject(err) let paramArr = [] let encodeData if (data instanceof Object) { for (let key in data) { // 参数拼接需要通过 encodeURIComponent 进行编码 paramArr.push( encodeURIComponent(key) + '=' + encodeURIComponent(data[key]) ) } encodeData = paramArr.join('&') } if (method === 'get') { // 检测 url 中是否已存在 ? 及其位置 const index = url.indexOf('?') if (index === -1) url += '?' else if (index !== url.length -1) url += '&' // 拼接 url url += encodeData } xhr.open(method, url, async) if (method === 'get') xhr.send(null) else { // post 方式需要设置请求头 xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=UTF-8') xhr.send(encodeData) } } ) }
阅读全文
0 0
- javascript系列之使用Promise封装ajax
- 使用Promise封装简单Ajax方法
- ajax 、jsonp 、Promise 封装
- 封装ajax和Promise
- Promise封装ajax请求
- ajax+promise 封装http请求
- JavaScript基础之Promise
- JavaScript异步之Promise
- JavaScript之Promise实现
- JavaScript Promise使用
- JavaScript Promise 使用
- 链式封装ajax请求的Promise
- 用promise封装ajax操作的例子
- 原生JavaScript封装ajax,可以直接使用
- 第十节,使用promise操作ajax
- ajax学习系列之二: 使用 JavaScript 和 Ajax 发出异步请求
- (转载)Javascript 之 Promise
- JavaScript杂谈之promise揭秘
- Bootstrap(三十三)
- 剑指offer——面试题16:反转链表
- mysql授权
- 【阶段总结】Dec. 4, 2017
- 正则表达式2
- javascript系列之使用Promise封装ajax
- Spring2.3——抽象Bean和子Bean
- 2017 前端大事件和趋势回顾,2018 何去何从?
- Centos 和 Linux的区别
- 3-6·yum命令、三步快速搭建yum
- PHP 下载文件到浏览器
- 一些链接
- 第十五周LeetCode
- Bootstrap(三十四)