ajax請求下載Execl表
阿新 • • 發佈:2018-12-12
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提交引數,並返回“流”型別的資料。