以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);
    }
    }
    });

 

posted @ 2017-05-15 01:52  夜空中闪亮的星星  阅读(10724)  评论(0编辑  收藏  举报