最近有个需求是在页面导入文件,后端进行处理后返回处理结果的excel,前端使用的是ajax。我最开始的做法是:在原有代码后加一段导出excel的代码,结果代码能正常运行,但页面始终没有返回我需要的excel。

而后开始百度编程模式,得出以下结论:

  ajax是无法直接导出excel的,因为ajax的返回值只能是字符流,而导出excel是后台往浏览器中写入二进制的字节流

导出excel有以下两种方式:

方法一:window.location.href() & form表单.submit().

<a href="javascript:void(0)" onclick="exportExcel()">导出</a>

// 导出,使用这种方式可以,使用ajax请求不可以导出excel
function exportExcel(){
var form = $("<form>");
form.attr('style', 'display:none');
form.attr('target', '');
form.attr('method', 'post');
form.attr('action', '${pageContext.request.contextPath}/user/export'); var input1 = $('<input>');
input1.attr('type', 'hidden');
input1.attr('name', 'item');
input1.attr('value', 'test'); /* JSON.stringify($.serializeObject($('#searchForm'))) */ $('body').append(form);
form.append(input1); form.submit();
form.remove();
}
function() {
var stime = $("#layerdate").val();
var etime = $("#layerdate2").val();
window.location.href = "${pageContext.request.contextPath}/user/export?stime="+stime+"&etime="+etime;
}

  

方法二:ajax请求把参数缓存在后端返回给前端,前端ajax再次发起一个window.open(url?params=params)即可

$.ajax({
url: '../../eldercare/excel/export?_' + $.now(),
type: 'post',
dataType: "json",
contentType : 'application/json',
data : JSON.stringify(this.tableOpts),
success: function(data){
window.open('../../eldercare/excel/downFromCache?params='+data.rows, '_self');
},

注意,使用window.open()或是window.location.href()时有个前端传值限制,超过限制数会报错。

Microsoft Internet Explorer (Browser):IE浏览器对URL的最大限制为2083个字符,如果超过这个数字,提交按钮没有任何反应。
Firefox (Browser):对于Firefox浏览器URL的长度限制为65,536个字符
Safari (Browser):URL最大长度限制为 80,000个字符。
Opera (Browser):URL最大长度限制为190,000个字符。
Google (chrome):url最大长度限制为8182个字符

  

最新文章

  1. idea Error:java: Compilation failed: internal java compiler error
  2. Android—Socket中关闭IO流后导致Socket关闭不能再收发数据的解决办法
  3. openfire+asmack搭建的安卓即时通讯(七) 15.5.27
  4. salt-ssh使用
  5. java面向对象编程——第四章 类和对象
  6. 关于Segmentation fault (core dumped)几个简单问题的整理
  7. 使用drawRect有什么影响
  8. android实现透明和半透明效果
  9. 云游戏学习与实践(二)——安装GamingAnywhere
  10. 接口interface,接口继承implements
  11. python读取数据库并把数据写入本地文件
  12. 【Spring Security】七、RememberMe配置
  13. 3. Longest Substring Without Repeating Characters (ASCII码128个,建立哈西表)
  14. js,java,jstl多分隔符分割字符串
  15. C++编写简单的俄罗斯方块游戏
  16. Vue实例对象的数据选项(火柴)
  17. storm集群安装
  18. Reading SketchVisor Robust Network Measurement for Sofeware Packet Processing
  19. How to create PDF files in a Python/Django application using ReportLab
  20. hdoj 1026 Ignatius and the Princess I 最小步数,并且保存路径

热门文章

  1. Fiddler发送post请求 出现503
  2. WWT在中国:一个改变了人类探索宇宙方式的少年梦想
  3. Telnet和SSH区别
  4. git获取公钥和私钥以及常用的命令
  5. TB3_Autorace之交通杆检测
  6. windows 不能在本地计算机启动apache2。有关更多信息,查阅系统事件日志。如果这是非Microsoft服务,请与服务厂商联系,并参考特定服务错误代码1
  7. python3下scrapy爬虫(第一卷:安装问题)
  8. Java 并发编程面试题
  9. 整数拆分-dp问题
  10. HexoC++第04课 构造析构.md