вероятно. Но я решил эту проблему с помощью непосредственного создания XMLHttpRequest. Рабочий код в комментарии ниже.

я проблема с получением файла Excel и открытием окна загрузки в браузере после получения ответа (при успешном использовании метода ajax) с этим файлом. Я получил соответствующийContent-Type and Content-Disposition headersЯ пытался использоватькапля в JS, и я не мог добиться того, что я хочу - простая загрузка файлов.
Я выполнил несколько версий моего AJAX, одна из них ниже. Я разработал ajax, который возвращает файл Excel, который я не смог открыть должным образом, потому что он поврежден (несмотря на расширение .xlsx).

Может быть, проблема в неподходящем типе данных, используемом в конструкторе Blob?

Я попытался использовать «xhr.response» вместо «data» из аргументов метода успеха, но это тоже не сработало. Я проверил заголовки ответа в инструментах разработчика в Chrome, и они установлены правильно.
Важно то, что все книги Excel, созданные на стороне сервера, являются правильными, потому что они работали в предыдущей версии, когда данные отправлялись в URL, а не в записи AJAX.

Метод контроллера на стороне сервера Java / Spring ниже:

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);
    }

Мой Ajax, чтобы скачать файл и открыть окно загрузки:

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

Ответы на вопрос(2)

Ваш ответ на вопрос