触发Blob的下载

时间:2016-06-29 04:20:24

标签: javascript firefox dom blob

我有一个在我的后端生成的csv文件,API要求我执行POST来触发文件的生成。这有点问题。幸运的是,我偶然发现了一些混合方法,这些方法似乎是少数人用于此类事情的一般方法。不幸的是,我似乎并不适用于Firefox,也许还有其他浏览器。我知道它在Chrome中运行得很完美,但我想知道它的Chrome是否可以使用,或者它是否因为某些原因而无法在Firefox中运行。下面是我到目前为止的代码,我手动修改了几个变量,试图在这里理解它们。但任何人都有任何想法?这是不能做的事情吗?

    $.ajax({
        url: '/api?id=' + post_file_id,
        "async": true,
        "crossDomain": true,
        "method": "GET",
        "headers": {
            "cache-control": "no-cache",
        },
        "processData": false,
    }).done((response) => {
        let a = document.createElement("a");
        document.body.appendChild(a);
        a.style = "display: none";

        let blob = new Blob([response], {type: "text/csv;charset=utf-8;"});
        let url = window.URL.createObjectURL(blob);
        a.href = url;
        a.download = 'download-' + post_file_.replace(' ', '_') + '.csv';
        a.click();
        window.URL.revokeObjectURL(url);
        //document.body.removeChild(a);

    }).fail(() => {
        this._showStatusAlertBox('error', 'There is no data for post.');
    });
}

1 个答案:

答案 0 :(得分:0)

也许你需要一些延迟。试试:

a.click();
setTimeout(function(){
   document.body.removeChild(a);
   window.URL.revokeObjectURL(url);  
}, 100);