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 相关文章推荐
js location.replace与location.reload的区别
Sep 08 Javascript
封装的原生javascript弹出层代码
Sep 24 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
Jan 23 Javascript
使用indexOf等在JavaScript的数组中进行元素查找和替换
Sep 18 Javascript
javascript运动详解
Jul 06 Javascript
JavaScript学习小结(7)之JS RegExp
Nov 29 Javascript
Angular.js如何从PHP读取后台数据
Mar 24 Javascript
Javascript类型系统之undefined和null浅析
Jul 13 Javascript
基于JavaScript实现窗口拖动效果
Jan 18 Javascript
JavaScript文档加载模式以及元素获取
Jul 28 Javascript
js实现微信聊天界面
Aug 09 Javascript
vue 动态添加class,三个以上的条件做判断方式
Nov 02 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根据ip查询所在地区(非常有用,赶集网就用到)
2013/07/01 PHP
PHP中使用正则表达式提取中文实现笔记
2015/01/20 PHP
php中Snoopy类用法实例
2015/06/19 PHP
js每次Title显示不同的名言
2008/09/25 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
对JavaScript客户端应用编程的一些建议
2015/06/24 Javascript
javascript实现简单的全选和反选功能
2016/01/05 Javascript
深入理解JS中的substr和substring
2016/04/26 Javascript
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
vue-router相关基础知识及工作原理
2018/03/16 Javascript
vuejs router history 配置到iis的方法
2018/09/20 Javascript
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
2019/03/29 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
2019/06/03 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
解决ele ui 表格表头太长问题的实现
2019/11/13 Javascript
python有证书的加密解密实现方法
2014/11/19 Python
在Python下尝试多线程编程
2015/04/28 Python
在Python中使用正则表达式的方法
2015/08/13 Python
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
2017/07/20 Python
Python简单实现的代理服务器端口映射功能示例
2018/04/08 Python
python 通过字符串调用对象属性或方法的实例讲解
2018/04/21 Python
pandas 对每一列数据进行标准化的方法
2018/06/09 Python
Python Flask框架模板操作实例分析
2019/05/03 Python
sklearn-SVC实现与类参数详解
2019/12/10 Python
PyQt5+python3+pycharm开发环境配置教程
2020/03/24 Python
完美解决jupyter由于无法import新包的问题
2020/05/26 Python
html5的新增的标签和废除的标签简要概述
2013/02/20 HTML / CSS
为中国消费者甄选天下优品:网易严选
2016/08/11 全球购物
美国花园雕像和家居装饰网上商店:Design Toscano
2019/03/09 全球购物
StubHub中国:购买和出售全球活动门票
2020/01/01 全球购物
新闻记者个人求职的自我评价
2013/11/28 职场文书
感恩的演讲稿
2014/05/06 职场文书
表扬信格式模板
2015/05/05 职场文书
农贸批发市场管理制度
2015/08/07 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书