zoukankan      html  css  js  c++  java
  • 关于使用ajax导出excel问题

    最近有个需求是在页面导入文件,后端进行处理后返回处理结果的excel,前端使用的是ajax。我最开始的做法是:在原有代码后加一段导出excel的代码,结果代码能正常运行,但页面始终没有返回我需要的excel。

    而后开始百度编程模式,得出以下结论:

      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', 'display:none');
         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请求把参数缓存在后端返回给前端,前端ajax再次发起一个window.open(url?params=params)即可

    $.ajax({
    url: '../../eldercare/excel/export?_' + $.now(),
    type: 'post',
    dataType: "json",
    contentType : 'application/json',
    data : JSON.stringify(this.tableOpts),
    success: function(data){
        window.open('../../eldercare/excel/downFromCache?params='+data.rows, '_self');
    },

    注意,使用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个字符
  • 相关阅读:
    Hanoi塔
    采药
    进制转换(大数)
    Load Balancing with NGINX 负载均衡算法
    upstream模块实现反向代理的功能
    epoll
    在nginx启动后,如果我们要操作nginx,要怎么做呢 别增加无谓的上下文切换 异步非阻塞的方式来处理请求 worker的个数为cpu的核数 红黑树
    粘性会话 session affinity sticky session requests from the same client to be passed to the same server in a group of servers
    负载均衡 4层协议 7层协议
    A Secure Cookie Protocol 安全cookie协议 配置服务器Cookie
  • 原文地址:https://www.cnblogs.com/wolf-shuai/p/14474826.html
Copyright © 2011-2022 走看看