Sad*_*san 15 php ajax jquery phpexcel
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');
Run Code Online (Sandbox Code Playgroud)
当我直接从浏览器调用上面的代码时,会下载结果文件.但是如果我对上面的代码进行ajax调用,我就不会得到下载提示.我可以从控制台选项卡中看到ajax调用已成功完成,并在响应数据中看到一堆随机字符.我假设那是excel对象.
有谁知道如何使用ajax实现下载excel功能?我不想刷新页面.当用户点击"导出"按钮时,应该对php文件进行ajax调用并提示用户下载.
小智 40
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));
Run Code Online (Sandbox Code Playgroud)
JS
$.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();
});
Run Code Online (Sandbox Code Playgroud)
Wir*_*hod 10
在你的ajax成功函数中添加target = _blank,如下所示
success: function(){
window.open('http://YOUR_URL','_blank' );
},
Run Code Online (Sandbox Code Playgroud)
否则,您可以巧妙地处理在新选项卡中使用jQuery触发器功能等打开Excel下载链接.
您不能使用ajax下载文件既不是由phpexcel也不是由php本身作为安全原因下载,而且几乎浏览器都不支持它.但是,您可以尝试使用window.location成功回调,例如,
var page='mydownload.php';
$.ajax({
url: page,
type: 'POST',
success: function() {
window.location = page;// you can use window.open also
}
});
Run Code Online (Sandbox Code Playgroud)
@freakish还回答了这类问题
即使你不需要ajax你可以使用超链接的页面,如,
<a href="mydownload.php" target="_blank" >Download</a>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
39189 次 |
最近记录: |