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提交参数,并返回“流”类型的数据。

  • 相关阅读:
    fstream之seekp/seekg/ios::ate/ios::app
    undefined reference to `shm_unlink'
    extern "C"用法
    CentOS 6.2 安装kdbg
    ROW模式的SQL无法正常同步的问题总结
    Mysql之sync-binlog参数
    本地连接远程环境mysql报错:Host'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server
    64位linux下rpm安装mysql的5.5.55版本所遇到的坑
    jquery中ajax异步调用接口
    jquery调用spring mvc接口返回字符串匹配
  • 原文地址:https://www.cnblogs.com/houqx/p/10106562.html
Copyright © 2011-2022 走看看