Ajax實現(xiàn)文件下載
JQuery的ajax函數(shù)的返回類型只有xml、text、json、html等類型,沒有“流”類型,所以我們要實現(xiàn)ajax下載,不能夠使用相應(yīng)的ajax函數(shù)進行文件下載。但可以用js生成一個form,用這個form提交參數(shù),并返回“流”類型的數(shù)據(jù)。在實現(xiàn)過程中,頁面也沒有進行刷新。
1. 使用ajax,ajax的返回值類型是json,text,html,xml類型,或者可以說ajax的發(fā)送,接受都只能是string字符串,不能流類型,所以無法實現(xiàn)文件下載,強用會出現(xiàn)response沖突。如果非要使用ajax的話,只能通過返回值得到生成的文件相關(guān)url。然后在回調(diào)函數(shù)里通過創(chuàng)建一個iframe,并設(shè)置其src值為文件url,或者一個對文件生成流的處理url,這樣操作來實現(xiàn)文件下載且頁面無刷新。
2. 不使用ajax,通過dom動態(tài)操作或創(chuàng)建iframe,form的方式來實現(xiàn),在下載文件的同時實現(xiàn)頁面不刷新,其中iframe的src可以是文件地址url來直接下載文件,也可以是流處理url通過response流輸出下載,form的是流處理url通過response流輸出下載,dom動態(tài)操作的時候?qū)崿F(xiàn)文件下載,且頁面無刷新。要在下載的同時實現(xiàn)進度條的話,可以創(chuàng)建一個定時任務(wù),每隔一定時間就向后臺發(fā)送請求,通過公用的對象,比如session,來取得文件下載的處理進度。
var title=$("input[name='gjzSelect']").val(); var rqTime = $(".ui-datepicker-time").val(); var ddd= rqTime.split("一"); var startTime=ddd[]; var endTime=ddd[]; var form = $("<form>"); //定義一個form表單 form.attr('style', 'display:none'); //在form表單中添加查詢參數(shù) form.attr('target', ''); form.attr('method', 'post'); form.attr('action', "<%=basePath%>jiankong/madeExcel.do"); var input = $('<input>'); input.attr('type', 'hidden'); input.attr('name', 'startTime'); input.attr('value', startTime); var input = $('<input>'); input.attr('type', 'hidden'); input.attr('name', 'endTime'); input.attr('value', endTime); var input = $('<input>'); input.attr('type', 'hidden'); input.attr('name', 'title'); input.attr('value', title); $('body').append(form); //將表單放置在web中 form.append(input); //將查詢參數(shù)控件提交到表單上 form.append(input); form.append(input); form.submit(); <%-- $.ajax({ url:'<%=basePath%>jiankong/madeExcel.do', cache:false, data:{ 'startTime':startTime, 'endTime':endTime, 'title' :title }, error:function (e){ alert("導(dǎo)出失??!"); }, success:function (data){ alert("導(dǎo)出成功!"); } }); --%>
以上所述是小編給大家分享的Ajax實現(xiàn)文件下載的相關(guān)知識,希望對大家有所幫助!
相關(guān)文章
js裝載xml文件然后發(fā)向服務(wù)器的實現(xiàn)代碼
js裝載xml文件然后發(fā)向服務(wù)器,具體的代碼可以參考下面的思路。2009-01-01淺析json與jsonp區(qū)別及通過ajax獲得json數(shù)據(jù)后格式的轉(zhuǎn)換
一言以蔽之,json返回的是一串?dāng)?shù)據(jù);而jsonp返回的是腳本代碼(包含一個函數(shù)調(diào)用);接下來通過本文給大家介紹json與jsonp區(qū)別及通過ajax獲得json數(shù)據(jù)后格式的轉(zhuǎn)換,需要的朋友參考下2016-03-03通達(dá)OA 使用Ajax和工作流插件實現(xiàn)根據(jù)人力資源系統(tǒng)數(shù)據(jù)增加OA賬號(圖文詳解)
這篇文章主要介紹了通達(dá)OA 使用Ajax和工作流插件實現(xiàn)根據(jù)人力資源系統(tǒng)數(shù)據(jù)增加OA賬號(圖文詳解),需要的朋友可以參考下2016-12-12$.ajax傳JSON數(shù)據(jù)到后臺的注意事項小結(jié)
這篇文章主要介紹了$.ajax傳JSON數(shù)據(jù)到后臺的注意事項,需要的朋友可以參考下2014-05-05