Мне кажется, что то, что вы хотите, невозможно.Я должен объяснить более подробно, что я имею в виду.
Нет проблем получить файл CSV, XLS или XLSX, содержащийся в HTTP POST.Проблема в том, чтобы показать ответ сервера в Excel, если вы будете использовать HTTP POST.
Код метода excelExport
очень прост, вы можете увидеть его здесь .excelExport
просто открывает URL, куда будут добавлены некоторые дополнительные параметры.Основная часть кода выглядит следующим образом:
window.location = url;
Итак, все реальные интересные вещи реализованы на сервере .Важно, чтобы сервер установил некоторые заголовки HTTP, особенно Content-Type
, которые определяют ответ HTTP как файл Excel (или как CSV, если вы не можете сгенерировать данные XLSX).Лично я использую Open XML SDK 2.0 для генерации файла XLSX и задаю "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
в качестве Content-Type
.В вашем случае это должно быть "text/csv"
(см. здесь ).Кроме того, можно использовать заголовок HTTP Content-Disposition
для определения предпочтительного имени файла ответа.Например, это может быть "attachment; filename=test.csv"
в вашем случае.Поскольку у вас уже есть серверный код, вы, вероятно, имеете все, что реализовано в коде.
Самая важная часть: веб-браузер знает , как открывать различные URL-адреса.Если он откроет новый URL ( на HTTP GET !!!), он будет использовать соответствующее приложение, например Excel, чтобы показать его.
С другой стороны, если вы используете $.ajax
, вы можете получитьCSV содержат HTTP POST, но как решить следующую проблему - запустить Excel с данными?Я не знаю простого решения без использования элементов управления ActiveX, работающих только в Internet Explorer.
Поэтому я рекомендую вам использовать HTTP GET.Если вы не хотите кэшировать данные, вы можете сделать это, установив соответствующие заголовки HTTP.Установка Cache-Control: max-age=0
в большинстве случаев достаточно.Установка Cache-Control: private
дополнительно отключает кэширование данных на прокси и объявляет, что данные могут кэшироваться, но не передаваться другим пользователям.Более подробную информацию о предмете вы можете найти в следующем Caching Tutorial .