我正在使用PHPExel读取excel模板,填充数据,并要求用户下载文件。
generate_excel.php
$objPHPExcel = PHPExcel_IOFactory::load("./template.xlsx");
//populate data ...
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="01simple.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
当我直接从浏览器打开generate_excel. php时,结果文件被下载。但是如果我对generate_excel. php进行ajax调用,我就不会得到下载提示。使用chrome开发工具,我可以从Network选项卡看到ajax调用成功完成,并且在响应数据中看到一堆随机字符。我假设这是excel对象。
有人知道我如何使用ajax实现下载excel的功能吗?我不想刷新页面,当用户点击"导出"按钮时,应该会有一个ajax调用php文件并提示用户下载。
谢谢!
5条答案
按热度按时间dxpyg8gm1#
我想用 AJAX 把JSON数据传递给PHP,然后返回一个excel文件(MySQL和PHPExel)让用户保存。我四处看了看,把一些碎片放在一起,希望它能帮助到别人:
jQuery:
PHP语言:
jaql4c8m2#
不是所有的事情都应该用 AJAX 来做。有时候普通的HTML更适合一份工作。我猜你的按钮有
a
标签?为什么你不做这样的事情呢注意
target="_blank"
部分。它的作用是确保页面不会被重新加载。对于
input
,可以使用constructhtrmnn0y3#
下面是如何使用 AJAX 调用下载文件的示例:
xe55xuns4#
找到了一种方法来做到这一点,虽然我不确定这是否是一个理想的方法。
我在页面中添加了一个隐藏的iframe,当 AJAX 调用返回时,它会返回创建数据的url,我使用javascript将iframe重定向到那个url,它会自动触发下载动作。
ubbxdtey5#
您可以尝试以下方法:
1.发送一个Jquery AJAX POST请求,其中包含用于生成excel报告的数据,并将该数据存储在一个会话变量中。返回一个任意字符串(如“success”)作为响应。
1.如果上述 AJAX 调用的输出为“success”,则对应用程序中的另一个URL执行GET请求,该请求从会话读取数据(在第一步中存储,否则抛出错误),从该数据准备excel文件,并强制将该excel文件下载到浏览器。