首页 > 解决方案 > 在不使用 Cookie 的情况下,使用 JQuery 下载带有加载器或进度表的 Excel 或其他二进制文件

问题描述

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

标签: jqueryajaxcookiesfetchfilesaver.js

解决方案


    $.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 帖子拼凑而成的。相关链接见下文:


推荐阅读