天天看点

ajax下载文件

 今天遇到这样一个需求,将查查出来的数据导出来,不是将所有的数据导出来,而是要导出满足条件的数据,也就是说下载的时候要将查询的条件传到后台。

例如: 先查询课程性质是选修的课程然后导出来:

ajax下载文件

前台封装条件的form:

后台springmcv接收查询条件并且生成一个excel文件到本地并且提供下载:

接下来尝试用ajax的post提交表单进行下载:

结果:响应头正确,数据也正确的传到后台,但是未下载文件:

ajax下载文件
ajax下载文件

 总结:

  即使ajax请求到一个controller在跳转到下载的controller上也不能下载,百度了一下总结下原因:发现原来jquery的ajax回调已经把response的数据傻瓜式的以字符串的方式解析.

第一种:将传条件的以表单提交的方式进行(推荐这种)-----这种方式也可以用来页面跳转

第二种:以window.location.href="xxx"的方式请求下载地址

  这种方法需要自己手动的拼接地址传递参数。get请求携带参数的方式:   xxxx.html?username=xxx&password=xxxx

第三种:动态创建表单加到fbody中,最后删除表单(推荐这种,可以将组合条件的值也动态的加入表单中)

注意:动态form必须加到dom树,否则会报异常:form submission canceled because the form is not connected。而且提交完需要删除元素。

进一步完善代码:

补充:    有时候上面查询条件到不了第二个动态表单中,需要手动添加查询条件到表单中,如下:

进一步封装如下: (第一个参数是form元素的id,也就是查询条件所在的form,第二个参数是下载的url,会自动遍历条件并拼接查询条件)

调用代码:

【当你用心写完每一篇博客之后,你会发现它比你用代码实现功能更有成就感!】

继续阅读