Ajax下载无弹出框——原因:Ajax只能返回String类型的数据
一、当前做法:
利用ajax普通的异步请求下载的Controller,传送参数;
$.ajax({ type: 'POST',url: "downloadReports.do", data: [ { name: "fileIds",value: "135" } ]
})
response.setContentType(
"application/octet-stream"
);
"application/OCTET-STREAM;charset=UTF-8"
response.setHeader(
"Content-disposition"
,
"attachment;filename="
+fileName1);
然后将数据流写入Response:
- //获得请求文件名
- Stringfilename=request.getParameter("filename");
- System.out.println(filename);
- //设置文件MIME类型
- response.setContentType(getServletContext().getMimeType(filename));
- //设置Content-disposition
- response.setHeader("Content-disposition","attachment;filename="+filename);
- //读取目标文件,通过response将目标文件写到客户端
- //获取目标文件的绝对路径
- StringfullFileName=getServletContext().getRealPath("/download/"+filename);
- //System.out.println(fullFileName);
- //读取文件
- InputStreamin=newFileInputStream(fullFileName);
- OutputStreamout=response.getoutputStream();
- //写文件
- intb;
- while((b=in.read())!=-1)
- {
- out.write(b);
- }
- in.close();
- out.close();
但是结果是,没有弹出下载框,前段没有任何反应,通过查看ajax的返回数据,发现数据流发送到客户端。
二、原因分析:
Ajax异步请求的原因,需要改造ajax的下载请求,
JQuery的ajax函数的返回类型只有xml、text、json、html等类型,没有“流”类型,所以我们要实现ajax下载,不能够使用相应的ajax函数进行文件下载。但可以用js生成一个form,用这个form提交参数,并返回“流”类型的数据。在实现过程中,页面也没有进行刷新。
<script type="text/JavaScript">
function DownLoad(strUrl) {
var form = $("<form>"); //定义一个form表单
form.attr('style','display:none'); //在form表单中添加查询参数
form.attr('target','');
form.attr('method','post');
form.attr('action',"/QuestionInfo/Dowmload");
var input1 = $('<input>');
input1.attr('type','hidden');
input1.attr('name','strUrl');
input1.attr('value',strUrl);
$('body').append(form); //将表单放置在web中
form.append(input1); //将查询参数控件提交到表单上
form.submit();
} </script>
————以上代码直接实现为某个按钮的Click事件即可;版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。