微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用JQuery使用加载器或进度表下载Excel或其他二进制文件,而无需使用Cookies

如何解决使用JQuery使用加载器或进度表下载Excel或其他二进制文件,而无需使用Cookies

在不使用cookie的情况下,如何使用JQuery下载Excel或其他二进制文件时如何向用户显示“正在加载”小部件或进度表?

解决方法

    $.ajax(url,{
        xhrFields: {
            responseType: 'arraybuffer'
        },success: function(data,textStatus,jqXHR) {
            var blob = new Blob([data],{type: jqXHR.getResponseHeader('content-type')});
            var fileName = jqXHR.getResponseHeader('content-disposition').split('filename=')[1].split(';')[0];
            saveAs(blob,fileName);
        },progress: function(e) {
            if (e.lengthComputable) {
                const completedPercentage = Math.round((e.loaded * 100) / e.total);
                if (completedPercentage >= 100) {
                    $("#loader").dialog("close");
                }
            }
            else {
                if (console) {
                    console.log('Content length not reported. Fix this server side.');    
                }
            }
        }
    });

Fetch API似乎是通过ajax拉取二进制文件的更好的方法,但是不支持IE,这对我来说是必需的。这是我查看的代码,以防它对任何人都有帮助。我没有添加关闭“加载程序”逻辑,但是我很确定您可以在保存文件之前或之后立即进行操作。

    fetch(url,{
        responseType: 'blob'
    }).then(response => response.blob())
      .then(blob => saveAs(blob,'test.xlsx'));

此答案是通过网络和一些SO帖子拼凑而成的。请参阅以下相关链接:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。