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(JS)替换节点实现思路介绍
Apr 17 Javascript
JS在TextArea光标位置插入文字并实现移动光标到文字末尾
Jun 21 Javascript
JQuery筛选器全系列介绍
Aug 27 Javascript
jquery 实现返回顶部功能
Nov 17 Javascript
javascript实现tab切换的四种方法
Nov 05 Javascript
Bootstrap缩略图的创建方法
Mar 22 Javascript
es6学习笔记之Async函数基本教程
May 11 Javascript
jQuery remove()过滤被删除的元素(推荐)
Jul 18 jQuery
react-navigation 如何判断用户是否登录跳转到登录页的方法
Dec 01 Javascript
JavaScript常见继承模式实例小结
Jan 11 Javascript
微信小程序 授权登录详解(附完整源码)
Aug 23 Javascript
详解Vue的异步更新实现原理
Dec 22 Vue.js
简述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数据库操作类
2007/09/02 PHP
很好用的PHP数据库类
2009/05/27 PHP
PHP中spl_autoload_register函数的用法总结
2013/11/07 PHP
微信支付PHP SDK ―― 公众号支付代码详解
2016/09/13 PHP
Laravel修改验证提示信息为中文的示例
2019/10/23 PHP
tp5框架使用cookie加密算法实现登录功能示例
2020/02/10 PHP
禁止刷新,回退的JS
2006/11/25 Javascript
北京奥运官方网站幻灯切换效果flash版打包下载
2008/01/30 Javascript
JS 面向对象的5钟写法
2009/07/31 Javascript
jQuery ui1.7 dialog只能弹出一次问题
2009/08/27 Javascript
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
2010/03/15 Javascript
基于jquery ajax 用户无刷新登录方法详解
2012/04/28 Javascript
javascript 函数及作用域总结介绍
2013/11/12 Javascript
toggle()隐藏问题的解决方法
2014/02/17 Javascript
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
使用JavaScript的AngularJS库编写hello world的方法
2015/06/23 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
2016/08/01 Javascript
js倒计时显示实例
2016/12/11 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
2017/05/03 Javascript
webpack构建vue项目的详细教程(配置篇)
2017/07/17 Javascript
微信小程序js文件改变参数并在视图上及时更新【推荐】
2018/06/11 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
three.js 制作动态二维码的示例代码
2020/07/31 Javascript
八种Vue组件间通讯方式合集(推荐)
2020/08/18 Javascript
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python实现浪漫的烟花秀
2019/01/30 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
2019/06/13 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
Python之字典添加元素的几种方法
2020/09/30 Python
探讨HTML5移动开发的几大特性(必看)
2015/12/30 HTML / CSS
Html5页面内使用JSON动画的实现
2019/01/29 HTML / CSS
JBL美国官方商店:扬声器、耳机等
2019/12/01 全球购物
分别介绍一下Session Bean和Entity Bean
2015/03/13 面试题
春季防火方案
2014/05/10 职场文书
学校督导评估方案
2014/06/10 职场文书
贸易经济专业自荐书
2014/06/29 职场文书