最近有个需求是导出符合条件的数据的Excel文件。前端使用Ajax,和以前的前后端不分离项目不同。而后开始百度编程模式,得出一下结论:

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', '');
     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请求把参数传给后端,后端返回一个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('../../eldercare/excel/downFromCache?params='+data.rows, '_self');
   	 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() &amp; form表单.submit()&lt;a href="javascript:void(0)" onclick="exportExcel()"&gt;导出 在我们的日常开发中,可能经常需要遇到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 文件