ajax请求下载Execl表
程序员文章站
2022-03-08 22:25:28
Execl表是经常要用到的存放二位数据的表格,Java也可以直接操作Execl表,经常用到的方式就是jxl和poi。 在这次项目中,我用到的poi往Execl中写数据,刚开始设计的是前端发送一个ajax请求,后端响应后再浏览器下载Execl表。 以上代码是最开始的设计思路,可是每次请求返回后,浏览器 ......
execl表是经常要用到的存放二位数据的表格,java也可以直接操作execl表,经常用到的方式就是jxl和poi。
在这次项目中,我用到的poi往execl中写数据,刚开始设计的是前端发送一个ajax请求,后端响应后再浏览器下载execl表。
function exportgjoil(){ $.ajax({ type: 'post', url: '/sysuser/selectaudittype', data: { id:[[${id}]], }, datatype: 'json', success: function (data) { if(data==2 ||data==4){ $.ajax({ type: 'get',
//想后天发送请求,后台往execl中写数据,并以流的形式返回前端 url: '/materialgjoildetail/downloadecexl', data: { year:[[${year}]], companyid:[[${companyid}]] }, // datatype: 'json', success: function (data) { $.infomsg("文件已下载至d:\校验结果"); }, error: function (data) { $.infomsg("下载失败,请重新下载"); } }); //window.location.href = "/materialgjoildetail/downloadecexl?year="+[[${year}]]+"&companyid"+[[${companyid}]]; } else{ $.infomsg("该公司没有燃油公交车辆信息"); } } });
以上代码是最开始的设计思路,可是每次请求返回后,浏览器控制台的response都是乱码,这是因为ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的,jquery的ajax函数的返回类型只有xml、text、json、html等类型,没有“流”类型,。文件的下载是以二进制形式进行的,所以ajax无法处理二进制流的response来下载文件。所以我们要实现ajax下载,不能够使用相应的ajax函数进行文件下载。
最后将ajax的请求改为用<a>标签来实现就可以了。或者用window.location.href="url"也可以。如果一定要用ajax,可以用就是生成一个form,用这个form提交参数,并返回“流”类型的数据。
上一篇: 【项目笔记】完成一个基于SSM框架的增删改查的模块后总结的问题
下一篇: JS教程:从0开始