下载带有ajax调用的文件
我使用PHPExcel读取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开发人员工具,我可以从“网络”选项卡中看到ajax调用已成功完成,并且在响应数据中看到了一堆随机字符。 我假设那是excel对象。
有谁知道如何使用ajax实现下载excelfunction? 我不想刷新页面。 当用户点击“导出”按钮时,应该对php文件进行ajax调用并提示用户下载。
谢谢!
我找了一些方法将带有ajax的JSON数据传递给PHP并返回一个excel文件(MySQL和PHPExcel)供用户保存。 我环顾四周,把一些碎片放在一起,希望它可以帮助某人:
jQuery的:
$("#exportBotton").on("click",function(event) { event.preventDefault(); // create json object; str_json = JSON.stringify({"key01":val01, "key02":val02, "key03":val03}); $.ajax({ type: "post", data: str_json, url: "../../includes/dbSelect_agentFormExport.php", dataType: "json", success: function(output){ // output returned value from PHP t document.location.href =(output.url); } }); });
PHP:
$str_json = file_get_contents('php://input'); $objPHPExcel = new PHPExcel(); // here i populated objPHPExcel with mysql query result..... function saveExcelToLocalFile($objWriter){ // make sure you have permission to write to directory $filePath = '../tmp/saved_File.xlsx'; $objWriter->save($filePath); return $filePath; } $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); $response = array( 'success' => true, 'url' => saveExcelToLocalFile($objWriter) ); echo json_encode($response); exit();
并非一切都应该用AJAX完成。 有时普通的旧HTML更适合工作。 我猜你的按钮有标签? 你为什么不做这样的事情
Export to Excel
在你的HTML? 注意target="_blank"
部分。 它是为了确保您的页面不被重新加载。
对于input
您可以使用构造
我不认为你可以通过ajax调用下载任何东西。 而不是您可以生成并保存服务器中的Excel(临时)并向用户显示下载链接。
找到了一种方法,虽然我不确定这是否是一种理想的方法。
我在页面中添加了一个隐藏的iframe。 当ajax调用返回时,它返回所创建数据的url。 我使用javascript将iframe重定向到自动触发下载操作的url。
你可以这样试试:
- 发送Jquery AJAX POST请求,其中包含用于生成Excel报告的数据,并将该数据存储在会话变量中。 返回一个像“success”这样的任意字符串作为响应。
- 如果上面的AJAX调用的输出是“成功”,那么对应用程序中的另一个URL执行GET请求,从会话中读取数据(存储在第一步中,否则抛出错误),准备一个excel文件该数据,并强制将该excel文件下载到浏览器。