Artur3194
@Artur3194

Почему не скачивается файл?

Доброго времени суток!
При использовании библиотеки PHPExcel, выдает ошибку при выдаче файла браузеру на скачивание. Но на сервере сохраняется. С фронтенда по нажатию кнопки всё это дело запускается. Делаю на локальном сервере.

$objWriter = new PHPExcel_Writer_Excel2007($xls);
    $objWriter->save(__DIR__ . '/receipt_' . date('d_m_Y__H_i') . '_' . generateHash() . '.xlsx');

    header("Expires: Mon, 1 Apr 1974 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT");
    header("Cache-Control: no-cache, must-revalidate");
    header("Pragma: no-cache");
    header("Content-type: application/vnd.ms-excel" );
    header("Content-Disposition: attachment; filename=receipt.xlsx");

    $objWriter->save('php://output');

Ошибка при посылке Ajax запроса.
609a949806635538193115.png
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
@zkrvndm
Боты, парсеры, расширения
Artem Kirsov, делайте так. Все ваши параметры засуньте в FormData и уже его отправляйте:
async function getFile() {
	
	var formData = new FormData();
	formData.append('id', 'Ваш ID');
	formData.append('test', 'Значение параметра test');
	
	var blob = await (await fetch('https://адрес_для_совершения_запроса', {
		method: 'POST',
		body: formData
	})).blob();
	
	console.log('Файл успешно скачан:');
	console.dir(blob);
	
	var link = document.createElement('a');
	link.download = 'filename.xlsx';
	link.href = URL.createObjectURL(blob);
	link.click();
	
	return blob;
	
}

Вызов функции getFile() будет возвращать промис результатом которого будет файл. Обратите внимание, что в FormData у меня всего лишь пример, как указывать параметры - вы должны там добавить свои параметры и их значения.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@impcyber
Ошибка не при посылке AJAX-запроса, а при обработке ответа от сервера.
Как видно, исходя из ошибки, то ответ от сервера обрабатывается в коллбеке success jQuery, при этом парсится как JSON, что в корне неверно, ибо передаваемые данные не являются валидным JSON, т.к. передается xlsx файл.

Как получить файл методом AJAX обсуждалось тут:
Как скачать файл с помощью AJAX?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы