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 相关文章推荐
return false;和e.preventDefault();的区别
Jul 11 Javascript
写自已的js类库需要的核心代码
Jul 16 Javascript
js实现YouKu的漂亮搜索框效果
Aug 19 Javascript
jquery validate表单验证的基本用法入门
Jan 18 Javascript
理解javascript中的严格模式
Feb 01 Javascript
JS生成和下载二维码的代码
Dec 07 Javascript
Angular自定义组件实现数据双向数据绑定的实例
Dec 11 Javascript
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
May 27 Javascript
基于iview-admin实现动态路由的示例代码
Oct 02 Javascript
JS在Array数组中按指定位置删除或添加元素对象方法示例
Nov 19 Javascript
Node Express用法详解【安装、使用、路由、中间件、模板引擎等】
May 13 Javascript
详解如何在Javascript中使用Object.freeze()
Oct 18 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 空格,换行,跳格使用说明
2009/12/18 PHP
Linux fgetcsv取得的数组元素为空字符串的解决方法
2011/11/25 PHP
PhpStorm本地断点调试的方法步骤
2018/05/21 PHP
PHPStorm 2020.1 调试 Nodejs的多种方法详解
2020/09/17 NodeJs
jQuery 开发者应该注意的9个错误
2012/05/03 Javascript
jquery iframe操作详细解析
2013/11/20 Javascript
js清空表单数据的两种方式(遍历+reset)
2014/07/18 Javascript
NodeJS制作爬虫全过程
2014/12/22 NodeJs
JS实现部分HTML固定页面顶部随屏滚动效果
2015/12/24 Javascript
Bootstrap每天必学之标签页(Tab)插件
2020/08/09 Javascript
react native实现往服务器上传网络图片的实例
2017/08/07 Javascript
用Webpack构建Vue项目的实践
2017/11/07 Javascript
vue+vuex+axios+echarts画一个动态更新的中国地图的方法
2017/12/19 Javascript
JavaScript实现删除数组重复元素的5种常用高效算法总结
2018/01/18 Javascript
layui复选框限制选择个数的方法
2019/09/18 Javascript
解决layer.prompt无效的问题
2019/09/24 Javascript
vue中使用elementUI组件手动上传图片功能
2019/12/13 Javascript
JS遍历树层级关系实现原理解析
2020/08/31 Javascript
[57:55]EG vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python实现控制台进度条功能
2016/01/04 Python
python自动化之Ansible的安装教程
2019/06/13 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
使用python和pygame制作挡板弹球游戏
2019/12/03 Python
Python3 把一个列表按指定数目分成多个列表的方式
2019/12/25 Python
python基于socket模拟实现ssh远程执行命令
2020/12/05 Python
YesStyle美国/全球:购买亚洲时装、美容化妆品和生活百货
2017/01/16 全球购物
宏碁西班牙官网:Acer西班牙
2021/01/08 全球购物
linux面试题参考答案(2)
2015/12/06 面试题
法律系毕业生自荐信范文
2014/03/27 职场文书
2014年党务工作总结
2014/11/25 职场文书
行政前台岗位职责
2015/04/16 职场文书
投标单位介绍信
2015/05/05 职场文书
2016年五四青年节校园广播稿
2015/12/17 职场文书
2020年元旦晚会策划书模板
2019/12/30 职场文书
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
2021/05/27 Servers
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL