婷婷久久综合九色综合,欧美成色婷婷在线观看视频,偷窥视频一区,欧美日本一道道一区二区

<tt id="bu9ss"></tt>
  • <span id="bu9ss"></span>
  • <pre id="bu9ss"><tt id="bu9ss"></tt></pre>
    <label id="bu9ss"></label>

    當(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 包含正則表達(dá)式 驗證用戶登錄的步驟

      這篇文章主要介紹了使用AJAX(包含正則表達(dá)式)驗證用戶登錄的步驟,本文給大家介紹的非常詳細(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

    熱門排行

    信息推薦