XHR request cant show the browser file download dialog, to do so you should save excel file in a temp directory, then return the file address from API controller. With the return value From API controller, just call Below Functions with TempName (return value from API controller)
function getExcelFile(tempName) {
var frmWindow = getIFrameWindow(tempName);
var frm = frmWindow.document.getElementById("frmFile");
frm.submit();
}
function getIFrameWindow(tempName) {
var oldIFrame = document.getElementById("fileFrame");
if (oldIFrame) {
document.body.removeChild(oldIFrame);
}
createFrame(tempName);
var wnd = window.frames["fileFrame"];
return wnd;
}
function createFrame(tempName) {
var frame = document.createElement("iframe");
frame.name = "fileFrame";
frame.id = "fileFrame";
document.body.appendChild(frame);
generateIFrameContent(tempName);
frame.style.width = "0px";
frame.style.height = "0px";
frame.style.border = "0px";
}
function generateIFrameContent(tempName) {
var frameWindow = window.frames["fileFrame"];
var content = "<form id='frmFile' method='get' enctype='application/data' action='/Temp/" + tempName + "'></form>";
frameWindow.document.open();
frameWindow.document.write(content);
frameWindow.document.close();
}