window.location.href导出文件参数过长问题

场景描述

word导出功能做完后,客户点击导出,先弹出确认取消框,确认时,如果一个人导出一个word,多个人则导出zip,客户前面用得挺好的;后面随着客户人员的增加,,一个部门下超50人后,客户某天点击导出,页面直接空白了;

一看F12,请求的url参数超长度了;网上给基本都是隐藏表单,提交表单来发送请求的方式,但是这种方式太复杂了,我不想使用;

最后在偶然间看见一篇大佬写的新思路,我觉得简单易学,就借鉴了过来;整体思路是2步走,①先用ajax发送参数到后台,后台将参数用Session存放起来,②在ajax的success回调中使用window.location.href=下载请求,这个下载请求的参数从Session中取;

场景代码

前段请求

原请求

//这种方式,批量导出,参数过多时,会出现url参数超出长度问题
//发送请求并返回浏览器下载
var ids = [];
var wordNames = [];
$.layerConfirm("请确定要导出人员登记表", function (res, index) {
      if (res) {
            $.layer.close(index);
            window.location.href=$.rootUrl + '/sys/toWord/exportEmp?ids='+ids+'&wordNames='+wordNames;
      }
});

修改后的请求

//修改后的逻辑,批量导出人员信息就不会出现url参数超出长度问题
var ids = [];
var wordNames = [];
$.layerConfirm("请确定要导出人员登记表", function (res, index) {
 if (res) {
     $.layer.close(index);
     $.ajax({
            url:$.rootUrl + '/sys/toWord/exportEmpSession', //发送参数请求到后台,后台存放到Session
            type:'post',
            data: {"ids":ids,"wordNames":wordNames},
            traditional: true,
            dataType:'json',
            async:false,
            success:function(res){
                 if(res.code='200'){
                     window.location.href=$.rootUrl + '/sys/toWord/exportEmp'; // 从后台Session取参数
                 }
            }
     });
  }
});

后端代码

/**
 * 存放导出人员word文档的参数
 * @param request
 * @param ids 人员ID数组
 * @param wordNames 文档名称数组
 * @return
 */
@ResponseBody
@RequestMapping("/exportEmpSession")
public ResultUtils exportEmpSession(HttpServletRequest request, String[] ids,  String[] wordNames){
    HttpSession session= request.getSession();
    //先清后存
    session.removeAttribute("exportEmpSessionIds");
    session.removeAttribute("exportEmpSessionWordNames");
    session.setAttribute("exportEmpSessionIds",ids);
    session.setAttribute("exportEmpSessionWordNames",wordNames);
    return ResultUtils.success();
}
/**
  * 导出人员word文档
  * ids人员id 和 wordNames导出的word名称,从session中获取
  * @param request
  * @param response
  * @throws IOException
  */
 @RequestMapping("/exportEmp")
 public void exportEmp(HttpServletRequest request, HttpServletResponse response) throws IOException {
     HttpSession session= request.getSession();
     //先用后清
     String[] ids = (String[]) session.getAttribute("exportEmpSessionIds");
     String[] wordNames = (String[]) session.getAttribute("exportEmpSessionWordNames");
     session.removeAttribute("exportEmpSessionIds");
     session.removeAttribute("exportEmpSessionWordNames");
     //原本逻辑的导出word方法,保持不变即可
 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值