乱码乱a∨中文字幕,在线免费激情视频,亚洲欧美久久夜夜潮,国产在线网址

  1. <sub id="hjl7n"></sub>

    1. <sub id="hjl7n"></sub>

      <legend id="hjl7n"></legend>

      當(dāng)前位置:首頁 >  站長 >  編程技術(shù) >  正文

      ajax實現(xiàn)excel報表導(dǎo)出

       2020-11-03 13:39  來源: 腳本之家   我來投稿 撤稿糾錯

        阿里云優(yōu)惠券 先領(lǐng)券再下單

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

      背景

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

      第一版

      主要代碼

      前端

      使用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請自行百度)

      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();

      ......

      }

      測試結(jié)果

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

      1、后端未設(shè)置字符集,或者在spring框架的過濾器中統(tǒng)一設(shè)置了字符集;

      2、前端頁面未設(shè)置字符集編碼;

      3、需要在ajax中添加 request.responseType = “arraybuffer”;

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

      第二版

      主要代碼

      前端,使用原生的ajax。后端未變動。

      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));

      測試結(jié)果

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

      總結(jié)

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

      以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

      來源:腳本之家

      鏈接:https://www.jb51.net/article/190772.htm

      申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點子。點擊此處,共同探討創(chuàng)業(yè)新機遇!

      相關(guān)標(biāo)簽
      ajax

      相關(guān)文章

      • Ajax實現(xiàn)頁面無刷新留言效果

        這篇文章主要為大家詳細(xì)介紹了Ajax實現(xiàn)頁面無刷新留言效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

        標(biāo)簽:
        ajax
      • AJAX檢測用戶名是否存在的方法

        這篇文章主要為大家詳細(xì)介紹了AJAX檢測用戶名是否存在,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

        標(biāo)簽:
        ajax
      • 使用AJAX 包含正則表達式 驗證用戶登錄的步驟

        這篇文章主要介紹了使用AJAX(包含正則表達式)驗證用戶登錄的步驟,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下

        標(biāo)簽:
        ajax
      • ajax使用formdata上傳文件流

        這篇文章主要為大家詳細(xì)介紹了ajax使用formdata上傳文件流,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

        標(biāo)簽:
        ajax
      • Spring MVC+ajax進行信息驗證的方法

        AJAX不是新的編程語言,而是一種使用現(xiàn)有標(biāo)準(zhǔn)的新方法。這篇文章主要介紹了SpringMVC+ajax進行信息驗證,需要的朋友可以參考下

        標(biāo)簽:
        ajax

      熱門排行

      信息推薦