ajax 下載文件


原本現在文件直接通過超鏈接可以完成下載,但現在要在url中附帶幾個參數,並且這些參數要是點擊事件觸發時的最新值,所以這里使用ajax的方式進行下載

然而:

1.使用ajax,ajax的返回值類型是json,text,html,xml類型,或者可以說ajax的發送,接受都只能是string字符串,不能流類型,所以無法實現文件下載,強用會出現response沖突。

如果非要使用ajax的話,只能通過返回值得到生成的文件相關url。然后在回調函數里通過創建一個iframe,並設置其src值為文件url,或者一個對文件生成流的處理url,這樣操作來實現文件下載且頁面無刷新。

 

2.不使用ajax,通過dom動態操作或創建iframe,form的方式來實現,在下載文件的同時實現頁面不刷新,其中iframe的src可以是文件地址url來直接下載文件,也可以是流處理url通過response流輸出下載,form的是流處理url通過response流輸出下載,dom動態操作的時候實現文件下載,且頁面無刷新。


這里就是用兩兩種操作dom方式實現下載:

操作iframe方式:

 

		function ajaxDownload(urlPost,data){
       		$.ajax({
				url: urlPost,
				type: "POST",
				cache: false,
				data:data,
				beforeSend:function(){
        			$("#grid_crud").pqGrid("showLoading")
        		},
				success: function(filename) {
					var url = urlPost + (((urlPost.indexOf("?") > 0) ? "&" : "?") + $.param(data));
					$(document.body).append("<iframe height='0' width='0' frameborder='0'  src=" + url + "></iframe>")
				},
				complete:function(data){
        			$("#grid_crud").pqGrid("hideLoading")
        		},
        		error:function(a,b,c){
        			$("#grid_crud").pqGrid("hideLoading")
        		}
			});
       }

操作form形式:

        function ajaxDownload(url,data,method){
        	if(url && data){
        		// data 是 string 或者 array/object
        		data = typeof data =='string'?data:jQuery.param(data);
        		var inputs ='';
        		jQuery.each(data.split('&'),function(){
        			var pair = this.split('=');
        			inputs +='<input type="hidden" name="'+pair[0]+'" value="'+pair[1]+'"/>';
        		});
        		jQuery('<form action="'+url+'" method="'+(method || 'post')+'">'+inputs+'</form>').appendTo('body').submit().remove();
        	}
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM