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实现继承机制之构造函数方法对象冒充的使用详解
May 07 Javascript
JS实现先显示大图后自动收起显示小图的广告代码
Sep 04 Javascript
js显示当前日期时间和星期几
Oct 22 Javascript
jQuery使用中可能被XSS攻击的一些危险环节提醒
May 24 Javascript
原生态js,鼠标按下后,经过了那些单元格的简单实例
Aug 11 Javascript
浅谈jQuery效果函数
Sep 16 Javascript
js图片切换具体实现代码
Oct 13 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
Mar 28 Javascript
webpack4.0 入门实践教程
Oct 08 Javascript
layui 中select下拉change事件失效的解决方法
Sep 20 Javascript
Vue设置长时间未操作登录自动到期返回登录页
Jan 22 Javascript
Javascript原型链及instanceof原理详解
May 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
基于mysql的论坛(3)
2006/10/09 PHP
简单实用的网站PHP缓存类实例
2014/07/18 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
2014/10/16 PHP
微信API接口大全
2015/04/15 PHP
PHP crc32()函数讲解
2019/02/14 PHP
如何让您的中波更粗更长 - 中波框形天线制作
2021/03/10 无线电
关于query Javascript CSS Selector engine
2013/04/12 Javascript
一款由jquery实现的整屏切换特效
2014/09/15 Javascript
jQuery中height()方法用法实例
2014/12/24 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
2016/07/04 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
jQuery表单元素选择器代码实例
2017/02/06 Javascript
Vue中正确使用jQuery的方法
2017/10/30 jQuery
详解基于webpack&gettext的前端多语言方案
2019/01/29 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
vue项目配置使用flow类型检查的步骤
2020/03/18 Javascript
vue表单验证之禁止input输入框输入空格
2020/12/03 Vue.js
Python实现去除代码前行号的方法
2015/03/10 Python
Python中用Spark模块的使用教程
2015/04/13 Python
Django验证码的生成与使用示例
2017/05/20 Python
python3+PyQt5实现文档打印功能
2018/04/24 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
python应用文件读取与登录注册功能
2019/09/23 Python
python 获取字典键值对的实现
2020/11/12 Python
pycharm远程连接服务器并配置python interpreter的方法
2020/12/23 Python
摄影实习自我鉴定
2013/09/20 职场文书
岗位职责定义及内容
2013/11/08 职场文书
测控技术与仪器个人求职信范文
2013/12/30 职场文书
十月份红领巾广播稿
2014/01/22 职场文书
2014年教研活动总结范文
2014/04/26 职场文书
幼师求职自荐信
2014/05/31 职场文书
通报表扬范文
2015/01/17 职场文书
个人总结与自我评价
2015/02/14 职场文书
警示教育观后感
2015/06/17 职场文书
全面盘点MySQL中的那些重要日志文件
2021/11/27 MySQL
德劲DE1105机评
2022/04/05 无线电