JQuery的ajax函數的傳回型別只有xml、text、json、html等類型,沒有“流”類型,所以我們要實現ajax下載,不能夠使用相應的ajax函數進行檔案下載。但可以用js產生一個form,用這個form提交參數,並返回“流”類型的資料。在實現過程中,頁面也沒有進行重新整理。
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動態操作的時候實現檔案下載,且頁面無重新整理。要在下載的同時實現進度條的話,可以建立一個定時任務,每隔一定時間就向後台發送請求,通過公用的對象,比如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表單中添加查詢參數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); //將查詢參數控制項提交到表單上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("匯出失敗!");},success:function (data){alert("匯出成功!");} }); --%>
以上所述是小編給大家分享的Ajax實現檔案下載的相關知識,希望對大家有所協助!