Obter arquivo excel (.xlsx) da resposta do servidor no ajax

Estou com um problema ao obter o arquivo excel e abrir a janela de download no navegador depois de obter uma resposta (no método ajax bem-sucedido) com esse arquivo. Eu tenho apropriadoContent-Type and Content-Disposition headers, Eu tentei usarBlob em js e eu não consegui o que eu queria - simples download de arquivos.
Eu realizei algumas versões do meu ajax, uma delas está abaixo. Eu desenvolvi o ajax que retorna o arquivo excel que não consegui abrir corretamente porque está corrompido (apesar da extensão .xlsx).

Talvez o problema seja com o tipo de dados inapropriado usado no construtor Blob?

Eu tentei usar "xhr.response" em vez de "dados" dos argumentos do método de sucesso, mas isso também não funciona. Verifiquei os Cabeçalhos de resposta nas Ferramentas do desenvolvedor no Chrome e eles estão definidos corretamente.
O importante - todas as pastas de trabalho do Excel criadas no lado do servidor estão corretas porque funcionavam na versão anterior quando os dados eram enviados na URL, não na postagem do ajax.

Método do controlador no lado do servidor Java / Spring abaixo:

response.reset();
response.setContentType("application/vnd.ms-excel");
response.addHeader("Content-Disposition","attachment;filename=\"" + className + " " +  title + ".xlsx\"");
    try (ServletOutputStream output = response.getOutputStream()){
        workbook.write(output);
        output.flush();
    } catch (Exception e) {
        throw new RuntimeException(e);
    }

Meu Ajax para baixar arquivo e abrir a janela de download:

$.ajax({
    url: myUrl,
    type: 'POST',
    data: myData,
    success: function(data, status, xhr) {
        var contentType = 'application/vnd.ms-excel';

        var filename = "";
        var disposition = xhr.getResponseHeader('Content-Disposition');
        if (disposition && disposition.indexOf('attachment') !== -1) {
            var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
            var matches = filenameRegex.exec(disposition);
            if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, '');
        }
        console.log("FILENAME: " + filename);

        try {
            var blob = new Blob([data], { type: contentType });

            var downloadUrl = URL.createObjectURL(blob);
            var a = document.createElement("a");
            a.href = downloadUrl;
            a.download = filename;
            document.body.appendChild(a);
            a.click();

        } catch (exc) {
            console.log("Save Blob method failed with the following exception.");
            console.log(exc);
        }