Ich versuche, eine CSV-Datei herunterzuladen und dann etwas zu tun, nachdem der Download beendet ist. Ich muss also eine entsprechende callback
Funktion.
Verwendung von window.location="..."
ist keine gute Idee, da ich das Programm nach Abschluss des Downloads nicht mehr bedienen kann. So etwas wie diese, ändern Sie die Kopfzeile, so dass es keine gute Idee ist.
fetch
ist jedoch eine gute Alternative er kann den IE 11 nicht unterstützen . Und window.URL.createObjectURL
kann IE 11 nicht unterstützen. Sie können este .
Dies ist mein Code, er ähnelt dem Code von Shahrukh Alam. Aber Sie sollten darauf achten, dass window.URL.createObjectURL
möglicherweise Speicherlecks verursachen. Sie können auf este . Sobald die Antwort eingetroffen ist, werden die Daten im Speicher des Browsers abgelegt. Bevor Sie also klicken a
Link, die Datei wurde heruntergeladen. Das bedeutet, dass Sie nach dem Herunterladen alles tun können.
$.ajax({
url: 'your download url',
type: 'GET',
}).done(function (data, textStatus, request) {
// csv => Blob
var blob = new Blob([data]);
// the file name from server.
var fileName = request.getResponseHeader('fileName');
if (window.navigator && window.navigator.msSaveOrOpenBlob) { // for IE
window.navigator.msSaveOrOpenBlob(blob, fileName);
} else { // for others
var url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.style.display = 'none';
a.href = url;
a.download = fileName;
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
//Do something after download
...
}
}).then(after_download)
}