Если нужны события, то как вариант - загружать через ajax как arraybuffer или blob и сохранять через
https://github.com/eligrey/FileSaver.js
Пример говнокода
var xhr = new XMLHttpRequest();
xhr.open('POST', "datatoexcel/", true);
xhr.responseType = 'blob';
xhr.setRequestHeader('Content-Type', 'multipart/form-data; boundary=' + boundary);
xhr.onerror = always;
xhr.onabort = always;
xhr.onload = function(e) {
if (this.status == 200) {
var today = new Date();
var dd = today.getDate().toString(10);
if (dd.length < 2) {
dd = '0' + dd;
}
var mm = (today.getMonth() + 1).toString(10);
if (mm.length < 2) {
mm = '0' + mm;
}
var yyyy = today.getFullYear();
saveAs(this.response, 'export_' + dd + '.' + mm + '.' + yyyy + '.xlsx');
}
always();
};
xhr.send(body);