满血复活,今天开始开始更新博客。
随着es6的普遍应用,promise属性也随之用之普遍,我们在一些项目中,为了避免引入一些http库,节省空间,就简单将原生http请求做了封装处理,封装代码如下:
(其中应用到了fetch,不懂得同学可以去mdn了解一下)
import http from './http';

let Http = {

    /**
* @example
* ```js
* Http.get('http://xxx.com/some_api', {
* headers: 'Instance of Header',
* mode: '请求模式 cors、 no-cors 或者 same-origin',
* })```
*
* @param {String} url
* @param {Object} opt
*/
get(url, opt) {
opt = opt || {};
opt.method = 'GET';
return fetch(url, opt);
}, /**
*
* @example
* ```js
* Http.post('http://xxx.com/some_api', {
* headers: 'Instance of Header',
* mode: '请求模式 cors、 no-cors 或者 same-origin',
* body: '字符串 查询字符串 FormData实例 Blob 或者 BufferSource(2进制数组)'
* })```
* @param {String} url
* @param {String | URLSearchParams | FormData | Blob | ArrayBuffer} data
* @param {Object} opt
*/
post(url, data, opt) {
opt = opt || {};
opt.method = 'POST';
let param;
if (data instanceof FormData || data instanceof URLSearchParams || typeof(data) === 'string') {
param = data;
} else {
param = new URLSearchParams();
for (let k in data) {
param.append(k, data[k]);
}
}
opt.body = param;
return fetch(url, opt);
}, /**
* @example
* ```js
* Http.upload('http://xxx.com/some_api', {
* progress: (loaded, total)=>{
* console.log(loaded, total);
* }
* })```
*
*
* @param {String} url
* @param {FormData | Blob | ArrayBuffer} data
* @param {Object} opt
*/
upload(url, data, opt) {
return new Promise((resolve, reject) => {
let xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.onprogress = opt.progress;
xhr.onerror = reject;
xhr.timeout = reject;
xhr.onload = function(evt) {
resolve({ body: evt.target.response, ok: evt.target.status >= 200 && evt.target.status < 300 });
};
xhr.send(data);
});
}, /**
* @example
* ```js
* Http.download('http://xxx.com/some_api', {
* type: 'arraybuffer',
* progress: (loaded, total)=>{
* console.log(loaded, total);
* }
* })```
*
*
* @param {String} url
* @param {Object} opt
*/
download(url, opt) {
return new Promise((resolve, reject) => {
let xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = opt.type || ''; xhr.onprogress = opt.progress;
xhr.onerror = reject;
xhr.timeout = reject;
xhr.onload = function(evt) {
resolve({ body: evt.target.response, ok: evt.target.status >= 200 && evt.target.status < 300 });
};
xhr.send(null);
});
}
}; export default Http;

最新文章

  1. ArcGIS属性选择器筛选
  2. AC日记——C’s problem(c) TYVJ P4746 (清北学堂2017冬令营入学测试第三题)
  3. SQL语句学习手册实例版
  4. 记一个同时支持模糊匹配和静态推导的Atom语法补全插件的开发过程: 序
  5. QT5 动态链接库的创建和使用
  6. Linux学习笔记(23) Linux备份
  7. PCL常见编程问题
  8. iOS-UIView category
  9. ntpdate公司测试
  10. .NET的语法优化
  11. Python基础 第二天
  12. 使用xshell链接本地虚拟机中的Linux
  13. SQL生成一柱双色球
  14. Babelfish
  15. jQuery checkbox 全选
  16. 关于PHP单双引号解析变量的问题
  17. feed 流数据请求时机的两个思路
  18. iOS-Mac配置Tomcat【Mac环境配置Tomcat】
  19. SpringBoot中跨域问题
  20. Codeforces Round #539 (Div. 2) - D. Sasha and One More Name(思维)

热门文章

  1. markdown语法小结
  2. 程序猿媛 九:Adroid zxing 二维码3.1集成(源码无删减)
  3. 数据库(Oracle)运维工作内容及常用脚本命令
  4. Semaphore 源码分析
  5. 一些琐碎的C/C++知识点
  6. Alpha冲刺No.2
  7. python 特殊方法实例
  8. mysql基础篇 - 其他基本操作
  9. SQL的介绍及MySQL的安装
  10. 201421123042 《Java程序设计》第11周学习总结