Execl表是經常要用到的存放二位數據的表格,Java也可以直接操作Execl表,經常用到的方式就是jxl和poi。 在這次項目中,我用到的poi往Execl中寫數據,剛開始設計的是前端發送一個ajax請求,後端響應後再瀏覽器下載Execl表。 以上代碼是最開始的設計思路,可是每次請求返回後,瀏覽器 ...
Execl表是經常要用到的存放二位數據的表格,Java也可以直接操作Execl表,經常用到的方式就是jxl和poi。
在這次項目中,我用到的poi往Execl中寫數據,剛開始設計的是前端發送一個ajax請求,後端響應後再瀏覽器下載Execl表。
function exportGjOil(){ $.ajax({ type: 'post', url: '/sysUser/selectAuditType', data: { id:[[${id}]], }, dataType: 'json', success: function (data) { if(data==2 ||data==4){ $.ajax({ type: 'get',
//向後臺發送請求,後臺往execl中寫數據,並以流的形式返回前端 url: '/materialGjOilDetail/downloadEcexl', data: { year:[[${year}]], companyId:[[${companyId}]] }, // dataType: 'json', success: function (data) { $.infoMsg("文件已下載至D:\校驗結果"); }, error: function (data) { $.infoMsg("下載失敗,請重新下載"); } }); //window.location.href = "/materialGjOilDetail/downloadEcexl?year="+[[${year}]]+"&companyId"+[[${companyId}]]; } else{ $.infoMsg("該公司沒有燃油公交車輛信息"); } } });
以上代碼是最開始的設計思路,可是每次請求返回後,瀏覽器控制台的response都是亂碼,這是因為ajax請求只是個“字元型”的請求,即請求的內容是以文本類型存放的,JQuery的ajax函數的返回類型只有xml、text、json、html等類型,沒有“流”類型,。文件的下載是以二進位形式進行的,所以ajax無法處理二進位流的response來下載文件。所以我們要實現ajax下載,不能夠使用相應的ajax函數進行文件下載。
最後將ajax的請求改為用<a>標簽來實現就可以了。或者用window.location.href="URL"也可以。如果一定要用ajax,可以用就是生成一個form,用這個form提交參數,並返回“流”類型的數據。