AngularJS基于http请求实现下载php生成的excel文件功能示例


Posted in Javascript onJanuary 23, 2018

本文实例讲述了AngularJS基于http请求实现下载php生成的excel文件功能。分享给大家供大家参考,具体如下:

使用PHPExcel插件的同学们都知道,导出excel是直接将生成内容修改content-type来将内容作为文件下载的,这时候需要页面上有一个url,通过点击来下载。

那么问题来了,如果在生成excel时有请求参数,只能通过js的http请求,这时候怎么下载呢?

研究了一下,有以下几种方式:

1. angularjs创建a标签模拟下载

// 创建a标签模拟下载
function exportExcel(params, filename) {
  return $http({
    url: '/api/exportExcel',
    method: "POST",
    headers: {
      'Content-type': 'application/json'
    },
    params: params,
    responseType: 'arraybuffer'
  }).success(function (data) {
    var blob = new Blob([data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"});
    var objectUrl = URL.createObjectURL(blob);
    var a = document.createElement('a');
    document.body.appendChild(a);
    a.setAttribute('style', 'display:none');
    a.setAttribute('href', objectUrl);
    a.setAttribute('download', filename);
    a.click();
    URL.revokeObjectURL(objectUrl);
  });
}

这个方式中要注意,如果传输的是xls,也就是excel5文件,type要设置为application/vnd.ms-excelapplication/x-excel

2. js将请求参数生成url,创建a标签

// 生成下载url
$scope.data.down_url = "../c_potential/get_excel?end_time="+$scope.end_date+"&liable="+liable+"&nickname="+$scope.data.nickname+"&province="+$scope.data.province_cur+"&start_time="+$scope.start_date;

然后将url绑定到某个a标签中,这种方式适合参数较少的情况,而且数据不会经过二次处理,不易发生error,唯一的缺点是需要处理两次,可以设置两个按钮,一个为生成,将参数写入url中,第二个按钮为下载excel。虽然用户是两次操作,但实际上只发生了一次http请求,不会影响性能。

3. 先生成后下载

第三种方式类似第二种,首先生成excel文件,储存到服务器,然后下载。涉及到磁盘IO,所以性能比较低,不推荐这种方式,只是作为一个方法记录下来。

angularjs模拟下载的方式最方便,但有可能出现error,第二种方式最保险。

希望本文所述对大家AngularJS程序设计有所帮助。

Javascript 相关文章推荐
Javascript 中介者模式实例
Dec 16 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
Sep 14 Javascript
js 判断checkbox是否选中的操作方法
Nov 09 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
Oct 23 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
Dec 28 Javascript
Js中使用hasOwnProperty方法检索ajax响应对象的例子
Dec 08 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
Dec 06 Javascript
JS实现中英文混合文字溢出友好截取功能
Aug 06 Javascript
Vue实现移动端页面切换效果【推荐】
Nov 13 Javascript
详解关于element级联选择器数据回显问题
Feb 20 Javascript
如何在项目中使用log4.js的方法步骤
Jul 16 Javascript
解决LayUI数据表格复选框不居中显示的问题
Sep 25 Javascript
简述vue中的config配置
Jan 23 #Javascript
JS实现多物体运动的方法详解
Jan 23 #Javascript
JS运动改变单物体透明度的方法分析
Jan 23 #Javascript
JS实现基于拖拽改变物体大小的方法
Jan 23 #Javascript
基于vue cli重构多页面脚手架过程详解
Jan 23 #Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
Jan 23 #Javascript
实时监控input框,实现输入框与下拉框联动的实例
Jan 23 #Javascript
You might like
PHP安装攻略:常见问题解答(三)
2006/10/09 PHP
php中经典方法实现判断多维数组是否为空
2011/10/23 PHP
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
2016/12/23 PHP
jquery 模拟类搜索框自动完成搜索提示功能(改进)
2010/05/24 Javascript
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
用JavaScript实现用一个DIV来包装文本元素节点
2014/09/09 Javascript
javascript正则表达式使用replace()替换手机号的方法
2015/01/19 Javascript
js实现表单多按钮提交action的处理方法
2015/10/24 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
2016/03/05 Javascript
使用Javascript监控前端相关数据的代码
2016/10/27 Javascript
angular4中关于表单的校验示例
2017/10/16 Javascript
利用nodeJs anywhere搭建本地服务器环境的方法
2018/05/12 NodeJs
详解webpack的proxyTable无效的解决方案
2018/06/15 Javascript
vue中轮训器的使用
2019/01/27 Javascript
生产制造追溯系统之在线打印功能
2019/06/03 Javascript
vue.js实现简单的计算器功能
2020/02/22 Javascript
详解Vue.js 响应接口
2020/07/04 Javascript
Java实现的执行python脚本工具类示例【使用jython.jar】
2018/03/29 Python
matplotlib.pyplot绘图显示控制方法
2019/01/15 Python
python 杀死自身进程的实现方法
2019/07/01 Python
Python如何使用BeautifulSoup爬取网页信息
2019/11/26 Python
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
世界上最大的巴士旅游观光公司:Big Bus Tours
2016/10/20 全球购物
互动出版网:专业书籍
2017/03/21 全球购物
花园仓库建筑:Garden Buildings Direct
2018/02/16 全球购物
Europcar德国:全球汽车租赁领域的领导者
2018/08/15 全球购物
介绍一下Java中的Class类
2015/04/10 面试题
养牛场项目建议书
2014/05/13 职场文书
争先创优活动总结
2014/08/27 职场文书
商铺门面租房协议书
2014/10/21 职场文书
2014年世界艾滋病日演讲稿
2014/11/28 职场文书
党员示范岗材料
2014/12/19 职场文书
2015年幼儿园教研活动总结
2015/03/25 职场文书
2015年党建工作汇报材料
2015/06/25 职场文书
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python
Qt数据库应用之实现图片转pdf
2022/06/01 Java/Android