[英]Download excel file with ajax call
$objPHPExcel = new PHPExcel();
$objPHPExcel->getActiveSheet()->setTitle('TestMessages');
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment; filename=test_form_".date("Y-m-d_H:i:s").".xls");
// 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调用,则不会收到下载提示。 我可以从控制台选项卡中看到ajax调用已成功完成,并且在响应数据中看到了一堆随机字符。 我假设这是excel对象。
有谁知道我如何使用Ajax实现excel下载功能? 我不想刷新页面。 当用户单击“导出”按钮时,应该对php文件进行ajax调用,并提示用户进行下载。
我推荐通过AJAX将数据从PHP类传递到PHPExcel,但不了解如何实现我的目标?
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));
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();
});
您实际上不需要Ajax。
使用javascript的window.location.replace()
如果您获得发送文件的网址),它将提示您下载而不重定向浏览器。
如果需要发布数据,则可以使用设置所需字段的方式创建隐藏表单,确保表单的“目标”属性设置为"_BLANK"
,然后以编程方式提交表单。
对于下面的第一个评论:
也许尝试更换:
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
与readfile ($file_name);
当您单击按钮时,为什么不重定向到下载excel文件的页面
我通过以下方式解决了我的问题。
在您的ajax成功函数中添加target = _blank,如下所示
success: function(){
window.open('http://MY_URL','_blank' );
},
成功后,使用my_url打开新窗口。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.