Скачать Excel-файл после ajax-запроса
Всем привет, я отправляю ajax-запрос на сервер для формирования отчета и мне надо его как-то скачать. Ajax:
$.ajax({
url: '/unloading/reportExcel/',
type: 'post',
data: {
name: _name,
startDate: _startDate,
endDate: _endDate,
objType: _objType,
},
})
.success(function (data) {
alert('report ready');
})
.done(function(data){
$('#name_rep').val('');
$('#osx_reportExcel_close_btn').click();
})
.fail(function( jqXHR, textStatus ){
err= 'err!' + "\n" + jqXHR.status + "\n" + jqXHR.statusText;
alert( err );
})
PHP:
public static function action_reportExcel(){
//code
createExcelFile($insert_row, $update_row);
}
public static function createExcelFile($insert, $update){
//code
b_clean();
header("Content-Type: application/vnd.ms-excel; charset=utf-8");
header('Content-Disposition: attachment;filename="otchet.xlsx"');
header('Cache-Control: max-age=0');
header('Cache-Control: max-age=1');
header("Expires: 0");
header("Content-Type: application/force-download");
header("Content-Type: application/download");
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0
header ('Location : index.php');
$objWriter->save('php://output');
exit;
}
Но файл скачивается, если только через devtools-> сеть перейти по запросу самому.
Всем благодарен за помощь!
Не скачивается в Firefox и Opera! Но Google почему-то работает
Ответы (1 шт):
Автор решения: Алексей Шиманский
→ Ссылка
1. Можно при клике на кнопку сформировать ссылку на которую программно кликнуть. Это было бы лучше, как мне кажется. И для это вовсе не нужен ajax
2.
Можно использовать атрибут HTML Атрибут download, чтобы сразу сделать там ссылку и если пользователь кликнет - скачать файл.
3. Попробуйте так:
$.ajax({
url: '/unloading/reportExcel/',
type: 'post',
data: {
name: _name,
startDate: _startDate,
endDate: _endDate,
objType: _objType,
},
})
.success(function (data) {
alert('report ready');
})
.done(function(data){
/* МАГИЯ ЗДЕСЬ */
let blob = new Blob([data]);
let link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = "<FILENAME_TO_SAVE_WITH_EXTENSION>";
link.click();
/* МАГИЯ ЗДЕСЬ */
$('#name_rep').val('');
$('#osx_reportExcel_close_btn').click();
})
.fail(function( jqXHR, textStatus ){
err= 'err!' + "\n" + jqXHR.status + "\n" + jqXHR.statusText;
alert( err );
})
4. Можно использовать download.js
$.ajax({
url: '<URL_TO_FILE>',
success: download.bind(true, "<FILENAME_TO_SAVE_WITH_EXTENSION>", "<FILE_MIME_TYPE>")
});