1. 程式人生 > >ajax請求下載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提交引數,並返回“流”型別的資料。