zoukankan      html  css  js  c++  java
  • 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提交参数,并返回“流”类型的数据。

  • 相关阅读:
    关于前后端跨域问题的解决
    vue+vuex+router+element ui
    winfrom导入excel文件
    winform 导出excel文件
    winfrom DataGridView 列表操作
    LaTex之CTex初体验一
    图像配准的步骤
    Phase Based Feature Detection and Phase Congruency(相位一致性)
    查找论文中的代码
    KullbackLeibler
  • 原文地址:https://www.cnblogs.com/houqx/p/10106562.html
Copyright © 2011-2022 走看看