以POST方式下载文件
情况1,提交的是非json数据
//流程:临时构建一个iframe并添加到要提交的form-》修改form的target指向该iframe-》提交form,然后删除临时iframe function downloadFile() { var $iframe = $('<iframe name="downloadFrame" style="display: none;" frameborder="0" />'); $("#addxxformfx").append($iframe); //addxxformfx:form的id $("#addxxformfx").attr("action","http://localhost:5080/lpproject/report2/previewHtml2.action");//要提交到的action $("#addxxformfx").attr("target","downloadFrame");//downloadFrame,指向上面iframe的名字 $("#addxxformfx").submit(); $iframe.remove(); }
情况2,提交是的json数据
使用ajax,ajax的返回值类型是json,text,html,xml类型,或者可以说ajax的发送,接受都只能是string字符串,不能流类型,所以无法实现文件下载。
方法:
1,需要有一个通过文件名等下载文件的方法
2,将要下载文件生成到服务器并获得文件路径,设置url到回调函数
3,通过在回调函数里获得一个生成文件的相关url,通过创建一个iframe,并设置其src值为文件url,这样访问下载方法操作来实现文件下载且页面无刷新。
//iframe: <iframe src="" style="display:none;" id="downFileIframe"></iframe> $.doAjax({ url:basePath+'resultTarget/downExcelTmpl.action', data:'nodes='+$.toJSONString(nodeArray), callback:function(msg){ if (msg.status == 0) { var url = basePath+"download.action?fileName="+encodeURI(encodeURI(escape("业绩-任务.xls")))+"&filePath="+msg.info; $('#downFileIframe').attr('src',url); } else { alert(msg.info); } } });