最近有个需求是导出符合条件的数据的Excel文件。前端使用Ajax,和以前的前后端不分离项目不同。而后开始百度编程模式,得出一下结论:
Ajax是无法直接导出Excel的,因为Ajax的返回值只能是字符流,而导出Excel是后台往浏览器中写入二进制的字节流。
导出Excel有以下两种方式:
方法一:window.location.href() & form表单.submit()
<a href="javascript:void(0)" onclick="exportExcel()">导出</a>
function exportExcel(){
var form = $("<form>");
form.attr('style', '');
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');
$('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请求把参数传给后端,后端返回一个url给前端,前端Ajax回调函数发起一个window.open(url?params=params)即可
$.ajax({
url: '../../eldercare/excel/export?_' + $.now(),
type: 'post',
dataType: "json",
contentType : 'application/json',
data : JSON.stringify(param),
success: function(data){
window.open(data, '_blank');
注意,使用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个字符。
最近有个需求是导出符合条件的数据的Excel文件。前端使用Ajax,和以前的前后端不分离项目不同。而后开始百度编程模式,得出一下结论:Ajax是无法直接导出Excel的,因为Ajax的返回值只能是字符流,而导出Excel是后台往浏览器中写入二进制的字节流。导出Excel有以下两种方式:方法一:window.location.href() & form表单.submit()<a href="javascript:void(0)" onclick="exportExcel()">导出
在我们的日常开发中,可能经常需要遇到excel的导出,以往excel的导出服务器端都是使用的GET方法,但是某些情况下,服务器端只能使用POST方法,那么我们有没有好的方法实现excel的导出呢,并且页面最好不要刷新。
二、实现思路
1、方案一:我们可以使用ajax拿到服务器端返回的数据下载流,然后借助Blob对象,在动态的创建一个a链接,那么也可以实现。
2、方案二:动态创建一个iframe标签下载,这种方案可以POST请求可能就无法下载了。
3、方案三:页面上动态的...
刚开始用的是:
window.location.href=encodeURI(Ajax.host+'/dl!exportDlExcel.jhtml?dlquotas='+JSON.stringify(dlquotas)+'&dlmaterials='+JSON.stringify(dlmaterials));
可以成功,但是由于地址栏传参是有长度限制,所以不得已换ajax方式
用ajax方式获取,后台返回的是文件,由于ajax不能接受文件,所以步骤如下:
引入:<script s
form.attr('target', '');
form.attr('method', 'post');
form.attr('action', '${ctx}/summarySearchApp/exportExcelStatistics.do');
var input1 = $('<input>');
input1.attr('type', 'hidden..
用ajax请求图片资源,服务器以文件流的形式返回。
1、返回类型需要设置为“blob”,所以需要用原生ajax,不能使用jq(原因:jquery将返回的数据转换为了string,不支持blob类型)(当然,你也可以引入组件拓展jq的能力,我知道的有一个:jquery-ajax-blob-arraybuffer.js);
2、使用FileReader将文件流转换成base64格式;
3.1、然...
记得之前写过ajax无法弹出保存下载对话框,就直接使用form表单进行提交,下载Excel的。但是如果需要传递参数的话,需要使用隐藏空间,有时候还有些麻烦,而使用ajax传递参数很方便啊?!于是我们可以通过ajax导出Excel
htm代码如下:
报 表 下 载 javaScript脚本代码如下:
function rptDownLoad(){
var rptId = $("#r
问题:我们发现直接使用ajax请求后台导出数据至Excel的过程中,后台程序必须为void类型,且使用ajax导出无任何反应,对于大数据的导出而言,不能使用ajax掌握导出的结束时间就无法给出结束提示。
解决办法:
1.服务器后台方法处理
我们使用NOPI创建一个NPOI.HSSF.UserModel.HSSFWorkbook book 创建一个book对象,将所有要到处的数据写入book
1.Ajax请求导出Excel的问题描述:
前端发起Ajax请求get或post,后台使用Poi生成excel文件,最后用response输出excel文件流。整个调用过程都没有报任何错,excel文件也生成在本地,但浏览器没有弹出文件下载,毫无反应。
2.解决:
开始一直以为是浏览器兼容性,或后台输出文件流代码有问题,调了半天,也都一样,不报任何错。后来上网搜发现在类似的问题,Ajax导出excel没反应,网上有人说不能使用ajax,换成地址重定向 window.location.href.
前端
jquery ajax js
导出excel
<button type="button" id="
excelBtn" class="layui-btn layui-btn-normal" data-type="reload">
导出Excel</button>
前端数据处理
//
导出按钮绑定事件
$("#
excelBtn").on("click", function(){
var JSON_DATA = {
"title":[
要使用 AJAX 导出 Excel 文件,可以采用以下步骤:
1. 使用 JavaScript/jQuery 发送 AJAX 请求到服务器,获取需要导出的数据。
2. 在服务器端,将数据转换为 Excel 文件,可以使用 PHPExcel 或者其他类库进行处理。
3. 将生成的 Excel 文件返回到客户端,可以使用 PHP 的 `header` 函数设置响应头,指定 MIME 类型为 `application/vnd.ms-excel`,并且设置 `Content-Disposition` 头部,让浏览器将响应保存为一个文件。例如:
```php
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="filename.xls"');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
4. 在客户端,使用 JavaScript/jQuery 将响应内容转换为 Blob 对象,然后创建一个下载链接,让用户点击下载。例如:
```javascript
$.ajax({
url: 'export.php',
type: 'POST',
dataType: 'blob',
success: function (data) {
var a = document.createElement('a');
var url = window.URL.createObjectURL(data);
a.href = url;
a.download = 'filename.xls';
a.click();
window.URL.revokeObjectURL(url);
这样,当用户点击下载链接时,就会触发 AJAX 请求,下载并保存 Excel 文件。