久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      ajax實(shí)現(xiàn)excel報(bào)表導(dǎo)出的詳解

      ajax實(shí)現(xiàn)excel報(bào)表導(dǎo)出的詳解

      利用ajax實(shí)現(xiàn)excel報(bào)表導(dǎo)出【解決亂碼問題】,供大家參考,具體內(nèi)容如下

      背景

      項(xiàng)目中遇到一個(gè)場(chǎng)景,要導(dǎo)出一個(gè)excel報(bào)表。由于需要token驗(yàn)證,所以不能用a標(biāo)簽;由于頁面復(fù)雜,所以不能使用表單提交。初步考慮前端使用ajax,后端返回流,定義指定的header。

      相關(guān)學(xué)習(xí)推薦:javascript視頻教程

      第一版

      主要代碼

      前端

      使用jquery的ajax

      var queryParams = {"test":"xxx"}; var url = "xxx"; $.ajax({  type : "POST", //提交方式  url : url,//路徑  contentType: "application/json",  data: JSON.stringify(queryParams),  beforeSend: function (request) {   request.setRequestHeader("Authorization", "xxx");  },  success : function(result) {   const blob = new Blob([result], {type:"application/vnd.ms-excel"});   if(blob.size < 1) {    alert('導(dǎo)出失敗,導(dǎo)出的內(nèi)容為空!');    return   }   if(window.navigator.msSaveOrOpenBlob) {    navigator.msSaveOrOpenBlob(blob, 'test.xls')   } else {    const aLink = document.createElement('a');    aLink.style.display = 'none';    aLink.href = window.URL.createObjectURL(blob);    aLink.download = 'test.xls';    document.body.appendChild(aLink);    aLink.click();    document.body.removeChild(aLink);   }  } });

      后端

      使用easypoi(如何使用easypoi請(qǐng)自行百度)

      import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams;  @PostMapping(value = "/download") public void downloadList(@RequestBody Objct obj, HttpServletResponse response) {   ......   List<Custom> excelList = new ArrayList<>();      // excel總體設(shè)置    ExportParams exportParams = new ExportParams();    // 指定sheet名字    exportParams.setSheetName("test");    Workbook workbook = ExcelExportUtil.exportExcel(exportParams, Custom.class, excelList);      response.setContentType("application/vnd.ms-excel");    response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("test", "utf-8") + ".xls");    OutputStream outputStream = response.getOutputStream();    workbook.write(outputStream);    outputStream.flush();    outputStream.close();      ......   }

      測(cè)試結(jié)果

      excel能正常導(dǎo)出,但下載下來的excel全是亂碼。經(jīng)過各種找答案,整理了一下可能是以下原因?qū)е拢?/p>

      1、后端未設(shè)置字符集,或者在spring框架的過濾器中統(tǒng)一設(shè)置了字符集;
      2、前端頁面未設(shè)置字符集編碼;
      3、需要在ajax中添加 request.responseType = “arraybuffer”;

      經(jīng)過不斷測(cè)試,我的應(yīng)該是第三點(diǎn)導(dǎo)致。但在jquery ajax 中添加后仍然不起作用,亂碼問題始終無法解決。

      第二版

      主要代碼

      前端,使用原生的ajax。后端未變動(dòng)。

      var xhr = new XMLHttpRequest(); xhr.responseType = "arraybuffer";  xhr.open("POST", url, true); xhr.onload = function () {  const blob = new Blob([this.response], {type:"application/vnd.ms-excel"});  if(blob.size < 1) {   alert('導(dǎo)出失敗,導(dǎo)出的內(nèi)容為空!');   return;  }  if(window.navigator.msSaveOrOpenBlob) {   navigator.msSaveOrOpenBlob(blob, 'test.xls')  } else {   const aLink = document.createElement('a');   aLink.style.display = 'none';   aLink.href = window.URL.createObjectURL(blob);   aLink.download = 'testxls';   document.body.appendChild(aLink);   aLink.click();   document.body.removeChild(aLink);   return;  } } xhr.setRequestHeader("Authorization", "xxx"); xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(JSON.stringify(queryParams));

      測(cè)試結(jié)果

      下載的excel不再亂碼,原生ajax中使用 “arraybuffer” 使用是生效的。

      總結(jié)

      “arraybuffer” 這個(gè)參數(shù)導(dǎo)致的excel導(dǎo)出亂碼,在原生的ajax中設(shè)置是有效的,在jquery的ajax中暫時(shí)還沒找到生效的方式。

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)