欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ajax请求下载Execl表

程序员文章站 2022-06-24 22:53:04
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提交参数,并返回“流”类型的数据。