【问题标题】:Stuck in dowload loop陷入下载循环
【发布时间】:2021-05-05 17:51:17
【问题描述】:

我一直在为用户提供一个 XLSX 文件的 HTML 页面。它运行良好,但在第一次下载后,用户会卡在下载循环中。

目前我正在使用这些库:Sheetjs 和 Filesaver。

负责构建xlsx文件并下载的函数:

function exportxls(){
    var wb = XLSX.utils.book_new();
    wb.Props = {
        Title: "Test001",
        Subject: "teste",
        Author: "Moreira",
        CreatedDate: new Date(2021,02,01)
    };
    
    wb.SheetNames.push("Test Sheet");
    var ws_data = [['hello' , 'world']];
    var ws = XLSX.utils.aoa_to_sheet(ws_data);
    wb.Sheets["Test Sheet"] = ws;
    var wbout = XLSX.write(wb, {bookType:'xlsx',  type: 'binary'});
    
    function s2ab(s) {
        var buf = new ArrayBuffer(s.length);
        var view = new Uint8Array(buf);
        for (var i=0; i<s.length; i++) view[i] = s.charCodeAt(i) & 0xFF;
        return buf;        
    }

    $("#button-a").click(function(){
        saveAs(new Blob([s2ab(wbout)],{type:"application/octet-stream"}), 'test.xlsx');
    }); 
}

【问题讨论】:

    标签: javascript downloadfile filesaver.js sheetjs


    【解决方案1】:

    这是因为您将$("#button-a").click(function(){... 放在exportxls() 中,当您调用该函数时,它会将click 事件附加到按钮上。把它移到外面。

    function exportxls() {
      var wb = XLSX.utils.book_new();
      wb.Props = {
        Title: "Test001",
        Subject: "teste",
        Author: "Moreira",
        CreatedDate: new Date(2021, 02, 01)
      };
      
      wb.SheetNames.push("Test Sheet");
      var ws_data = [
        ['hello', 'world']
      ];
      var ws = XLSX.utils.aoa_to_sheet(ws_data);
      wb.Sheets["Test Sheet"] = ws;
      var wbout = XLSX.write(wb, {
        bookType: 'xlsx',
        type: 'binary'
      });
      
      function s2ab(s) {
        var buf = new ArrayBuffer(s.length);
        var view = new Uint8Array(buf);
        for (var i = 0; i < s.length; i++) view[i] = s.charCodeAt(i) & 0xFF;
        return buf;
      }
      saveAs(new Blob([s2ab(wbout)], {
        type: "application/octet-stream"
      }), 'test.xlsx');
      
    }
    
    $("#button-a").click(function () {
      exportxls();
    });
    

    【讨论】:

    • 你好,Uingtea。你的解决方案对我有用。我花了 3 天时间寻找解决方案,非常感谢!
    • @KMoreira 不客气,请将答案标记为已接受。
    猜你喜欢
    • 2010-11-09
    • 1970-01-01
    • 2015-11-16
    • 2019-11-12
    • 2017-03-05
    • 1970-01-01
    • 2020-05-13
    • 2011-06-21
    • 2017-05-22
    相关资源
    最近更新 更多