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中类的定义及其方式(《javascript高级程序设计》学习笔记)
Jul 04 Javascript
JS读取cookies信息(记录用户名)
Jan 10 Javascript
基于jquery自己写tab滑动门(通用版)
Oct 30 Javascript
js中的数组Array定义与sort方法使用示例
Aug 29 Javascript
javascript检测是否联网的实现代码
Sep 28 Javascript
javascript处理a标签超链接默认事件的方法
Jun 29 Javascript
百度地图api如何使用
Aug 03 Javascript
正则 js分转元带千分符号详解
Mar 08 Javascript
Vue2组件tree实现无限级树形菜单
Mar 29 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
Apr 30 Javascript
js实现图片推拉门效果代码实例
May 18 Javascript
使用easyui从servlet传递json数据到前端页面的两种方法
Sep 05 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
深入PHP5中的魔术方法详解
2013/06/17 PHP
解析php安全性问题中的:Null 字符问题
2013/06/21 PHP
根据中文裁减字符串函数的php代码
2013/12/03 PHP
thinkphp实现图片上传功能分享
2014/03/04 PHP
JSQL 基于客户端的成绩统计实现方法
2010/05/05 Javascript
说说JSON和JSONP 也许你会豁然开朗
2012/09/02 Javascript
JS判断变量是否为空判断是否null
2014/07/25 Javascript
Select下拉框模糊查询功能实现代码
2016/07/22 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
2016/11/11 Javascript
基于javascript的Form表单验证
2016/12/29 Javascript
js学使用setTimeout实现轮循动画
2017/07/17 Javascript
js获取css的各种样式并且设置他们的方法
2017/08/22 Javascript
vue实现全选和反选功能
2017/08/31 Javascript
AngularJS日期格式化常见操作实例分析
2018/05/17 Javascript
微信小程序模板template简单用法示例
2018/12/04 Javascript
vue和better-scroll实现列表左右联动效果详解
2019/04/29 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
2019/07/10 Javascript
详解如何在Vue项目中发送jsonp请求
2019/10/25 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
Python的GUI框架PySide的安装配置教程
2016/02/16 Python
Python PyQt4实现QQ抽屉效果
2018/04/20 Python
Python过滤txt文件内重复内容的方法
2018/10/21 Python
python 实现两个npy档案合并
2020/07/01 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
python3爬虫中引用Queue的实例讲解
2020/11/24 Python
通过css3的filter滤镜改变png图片的颜色的示例代码
2020/05/06 HTML / CSS
高中毕业生自我鉴定范文
2013/09/26 职场文书
大学生村官心得体会范文
2014/01/04 职场文书
顶岗实习计划书
2014/01/10 职场文书
元旦晚会活动总结
2014/07/09 职场文书
作风建设年活动总结
2014/08/27 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
海洋天堂观后感
2015/06/05 职场文书
律师催款函范文
2015/06/24 职场文书
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
2021/06/07 Python