javascript - 陷入下载循环
问题描述
我一直在为用户提供一个 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');
});
}
解决方案
这是因为你把它放在$("#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();
});
推荐阅读
- javascript - React Leaflet 与分组层
- python - Pandas get_dummies 不断在列名后使用数字创建额外的列
- javascript - keyDown 处理程序在自定义 React 钩子中被触发两次而不是一次
- python - 如何使用元数据将音频文件放在目录中?
- subquery - 如何使用不同的标准多次拉取 MaxDate
- javascript - 我怎样才能让discord js随机选择两张图片?
- java - Spring.schemas 在提取的 jar 中不起作用
- java - 关于效率: .filter(Optional::isPresent).map(Optional::get) 不是比 .flatmap(Optional::stream) 好吗?
- python - Pandas:解析损坏的 .xls 文件
- java - 如何在 Java 16 中将 JAR 动态加载到运行时?