Ajax 호출을 사용한 PHP Excel 다운로드
App::import('Vendor', 'PHPExcel/Classes/PHPExcel');
$objPHPExcel = new PHPExcel();
$objPHPExcel->getActiveSheet()->setTitle('ReceivedMessages');
header('Content-Type: application/vnd.ms-excel');
$file_name = "kpi_form_".date("Y-m-d_H:i:s").".xls";
header("Content-Disposition: attachment; filename=$file_name");
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
브라우저에서 직접 위의 코드를 호출하면 결과 파일이 다운로드됩니다.그러나 위 코드로 아약스를 호출하면 다운로드 프롬프트가 표시되지 않습니다.콘솔 탭에서 Ajax 호출이 성공적으로 완료되었으며 응답 데이터에 임의의 문자가 많이 표시됨을 알 수 있습니다.저는 그것이 엑셀 오브젝트라고 생각합니다.
아약스를 사용하여 엑셀 다운로드 기능을 어떻게 달성할 수 있는지 아는 사람이 있습니까?페이지를 새로 고치고 싶지 않습니다.사용자가 "내보내기" 버튼을 클릭하면 php 파일에 대한 Ajax 호출이 있고 사용자에게 다운로드를 요청해야 합니다.
PHP
$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
ob_start();
$objWriter->save("php://output");
$xlsData = ob_get_contents();
ob_end_clean();
$response = array(
'op' => 'ok',
'file' => "data:application/vnd.ms-excel;base64,".base64_encode($xlsData)
);
die(json_encode($response));
제이에스
$.ajax({
type:'POST',
url:"MY_URL.php",
data: {},
dataType:'json'
}).done(function(data){
var $a = $("<a>");
$a.attr("href",data.file);
$("body").append($a);
$a.attr("download","file.xls");
$a[0].click();
$a.remove();
});
아래와 같이 Ajax 성공 함수에 target=_blank 추가
success: function(){
window.open('http://YOUR_URL','_blank' );
},
그렇지 않으면 jQuery 트리거 기능 등으로 새로운 탭에서 Excel 다운로드 링크를 열 수 있도록 현명하게 처리할 수 있습니다.
phpexcel이나 php 자체를 보안상의 이유로 사용하여 ajax를 사용하여 파일을 다운로드할 수 없으며 거의 모든 브라우저가 이를 지원하지 않습니다.하지만 window.location은 성공적인 콜백을 시도할 수 있습니다.
var page='mydownload.php';
$.ajax({
url: page,
type: 'POST',
success: function() {
window.location = page;// you can use window.open also
}
});
또한 @이 유형의 질문에 대해 이상한 대답을 했습니다.
아약스가 없어도 페이지에 하이퍼링크를 사용할 수 있습니다.
<a href="mydownload.php" target="_blank" >Download</a>
나는 스프레드시트에서 같은 일을 하려고 노력하고 있고 그것은 xls 파일에서는 잘 작동하지만 mpdf 파일에서는 잘 작동하지 않습니다.
IOFactory::registerWriter('Pdf', $this->classNamePdf);
ob_start();
IOFactory::createWriter($this->exportType, 'Pdf')->save('php://output');
$pdfData = ob_get_contents();
ob_end_clean();
return "data:application/pdf; base64,".base64_encode($pdfData);
success: function(response){
var win = window.open("", "_blank");
win.location.href = response;
}
언급URL : https://stackoverflow.com/questions/27701981/phpexcel-download-using-ajax-call
'itsource' 카테고리의 다른 글
git clone에 ssh 옵션 전달 중 (0) | 2023.08.20 |
---|---|
디지털 오션에서 헤로쿠로 마이그레이션 (0) | 2023.08.20 |
Angular2 - 구성 요소 로드에 텍스트 상자 초점 맞추기 (0) | 2023.08.20 |
'<%#Eval("item") %>' 사용; Null 값 처리 및 0 표시 (0) | 2023.08.20 |
Java가 클래스 경로를 무시합니다. (0) | 2023.08.20 |