2016-06-29 84 views
0

我有一個csv文件在我的後端生成,並且API要求我執行POST來觸發文件的生成。這是有點問題。幸運的是,我偶然發現了一些混合搭配的方法,這些方法似乎是一小撮人使用這種類似的東西的普遍方式。不幸的是,我似乎沒有在Firefox和其他瀏覽器上工作。我知道它在Chrome中完美運行,但我想知道它是否能夠運行,或者它是否因爲某些原因而無法在Firefox中運行。下面是我到目前爲止的代碼,我手動更改了一些變量,試圖在這裏理解它們。但任何人有任何想法?這是不可能完成的嗎?Blob觸發器下載

$.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.'); 
    }); 
} 
+0

類似http://stackoverflow.com/questions/30694453/blob-createobjecturl-download-not-working-in-firefox-but-works-when-debugging:與嘗試 – Musa

回答

0

也許你需要一些延遲。

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