参考:http://yuwenlin.iteye.com/blog/2275289

1.Ajax请求导出Excel的问题描述:

  前端发起Ajax请求get或post,后台使用Poi生成excel文件,最后用response输出excel文件流。整个调用过程都没有报任何错,excel文件也生成在本地,但浏览器没有弹出文件下载,毫无反应。

2.解决:

  开始一直以为是浏览器兼容性,或后台输出文件流代码有问题,调了半天,也都一样,不报任何错。后来上网搜发现在类似的问题,Ajax导出excel没反应,网上有人说不能使用ajax,换成地址重定向 window.location.href 就行,一换还真好使。

function() {var stime = $("#layerdate").val();var etime = $("#layerdate2").val();window.location.href = "${pageContext.request.contextPath}/user/export?stime="+stime+"&etime="+etime;
}

  但是当需要传一个很大数据到后台(window.location.href= actionUrl + "?" + data;),就会出问题了,当然,当数据量不大的时候,使用这种方式是极好的。导致这个问题的原因是各种浏览器对URL解析的长度限制是不同的。

  • 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个字符

  解决方法就换成了使用隐藏form来执行导出操作,如下:

<a href="javascript:void(0)" onclick="exportExcel()">导出1</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();
}

3.总结:

  导出excel为什么不能用ajax请求?

  因为导出excel,实际上是文件下载,后台需要往前端(浏览器)写文件流的。而Ajax请求获取数据都是“字符串”,整个交互传输用的都是字符串数据,它没法解析后台返回的文件流,但浏览器可以。

4.Ajax与Form表单提交的区别:

  Ajax提交不会自动刷新页面,需要手动处理。

  Form表单提交在数据提交后会刷新页面,如果是Post提交,点击刷新浏览器会提示 是否再次提交。

Ajax请求导出Excel的问题相关推荐

  1. Ajax请求导出Excel的问题【ajax不能下载文件】

    最近要给后台添加操作日志导出的功能,后台已经生成.xls文件,本来想只要ajax请求下就完事儿,想象总是美好的,可不管我怎么ajax,想了各种可能原因也无法解决. 问题描述 前端发送ajax[get/ ...

  2. ajax调用api改表格数据库,【django基础】django接口 异步ajax请求 导出数据库成excel表(包裹前端后端)...

    py文件: from django.utils.http import urlquote from rest_framework.views import APIView from django.sh ...

  3. java post excel_POST请求导出Excel

    目的:使用POST请求导出Excel文档. 起因:在使用Java导出Excel时,笔者在上一篇文章中使用的导出POJO或者BSONDocument类型的Excel文档的方法,其实使用的是GET请求,因 ...

  4. java使用ajax请求下载excel响应结果显示乱码

    需求:前端进行一简单条件查询请求,通过后台到数据库中根据条件进行查询数据,然后将查询到的数据通过excel直接响应给用户进行下载 现象:前端页面设计好了,文件下载方法也已完成,然后进行测试,发现前端点 ...

  5. POI 导入、导出Excel

    POI,全称Apache POI,是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能.项目地址:Apache POI - t ...

  6. 导出excel,后台执行,前台无反应

    1.Ajax请求导出Excel的问题描述: 前端发起Ajax请求get或post,后台使用Poi生成excel文件,最后用response输出excel文件流.整个调用过程都没有报任何错,excel文 ...

  7. ajax 怎么input赋值,jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签...

    jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签 发布于 2016-11-25 16:26:40 | 111 次阅读 | 评论: 0 | 来源: ...

  8. ajax excel导出问题,AJAX导出excel问题

    你好,我需要知道 导出 excel文件从服务器端发送到浏览器的时间,在这期间要显示进度条.  利用AJAX方式导出excel 不知是否可行,代码如下: function exportFileWithA ...

  9. Java 导出Excel的各种尝试

    最近的一个项目比较忙,一直没时间过来跟新博客.今天过来分享一下在此项目中遇到的一个小问题:导出Excel:相信导出Excel这个功能是特别常见的,也有很多的方式.好了,不多说了,直接说说自己遇到的各种 ...

最新文章

  1. html按钮线性炫光,6分钟实现CSS炫光倒影按钮 html+css
  2. Python编程实现粒子群算法(PSO)详解
  3. 【PAT乙级】1038 统计同成绩学生 (20 分)
  4. 在实际使用中 mysql所支持的触发器有_计算机二级考试MySQL数据库每日一练 12月26日...
  5. 计算机维修与维护入门,计算机组装与维护基础知识
  6. 编写程序乘法口诀表C语言,陈广川问:c语言编程九九乘法口诀表 怎样用c语言写九九乘法口诀表?...
  7. python制作等高线云图,matplot 画等高线图
  8. 多个pdf合并成一个pdf_十秒教你将多个PDF如何合并成一个PDF
  9. 搭建MVC及WebAPI项目框架时碰到的问题集合
  10. PyCUDA Documentation
  11. 数据结构笔记(十六)-- 数组实现
  12. win10多合一原版系统_微软Win10专业版制作多合一系统安装盘教程
  13. CDN 是什么 、CDN 引入
  14. 成功长青——不读此书,愧为人徒,不读此书,愧为人师
  15. 金融行业软件测试面试题(含答案)
  16. Java基础篇--概念理解(泛型、注解)
  17. 经典图书介绍:广义相对论--从A到B
  18. Html5 学习笔记 【PC固定布局】 实战6 咨询页面
  19. linux微信最新版无法打开问题解决
  20. Pillow库的用法

热门文章

  1. python append 浮点数 精度_Python打牢基础,从12个语法开始!
  2. 【Linux】【服务器】 CentOS7下卸载MySQL详细过程步骤
  3. @Transactional事务的使用和注意事项及其属性
  4. python实验过程心得体会_20192416 实验四《Python程序设计》综合实践报告
  5. python协程实时输出_python协程
  6. Kotlin进行异步操作
  7. 常见的前端vue面试题
  8. 用leda没有java enterprise选项_Visual Studio 支持 Java?谣言止于智者
  9. vue拖动改变模板_可视化拖拽 UI 布局之拖拽篇
  10. Mysql For Windows安装图解