首页 > 解决方案 > JQuery 和 PHP:是否可以通过 AJAX 调用下载文件?

问题描述

我有一个在表格中显示数据的网页,我想添加一个按钮,用户可以单击该按钮将表格下载为 Excel 文件。我使用 PHPExcel 制作 Excel 文件,在我真正开始下载文件之前,它似乎可以正常工作 - 浏览器似乎可以很好地生成文件,但实际上并没有下载完成的文件。

我确实在这里查看了这个问题:phpexcel to download,但我尝试了答案所说的,它似乎没有改变任何东西。

这是我的前端代码(“table.php”):

<script>
$("#export-to-excel").click(function() {
            $.ajax({
                type: "GET",
                url: "table_create_excel.php",
                data: {
                    action: "exportToExcel",
                    tableRows: rows
                }
            });
}
</script>
<img src='excel-icon.png' id="export-to-excel"/>

这是我的后端代码(“table_create_excel.php”):

    require_once "PHPExcel.php";
    $objPHPExcel = new PHPExcel();
    // ...
    // ... generate the excel document from the given data ...
    // ...
    $objPHPExcel->setActiveSheetIndex(0);
    
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="Table_Summary.xlsx"');
    header('Cache-Control: max-age=0');

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
    $objWriter->save('php://output');

有什么我遗漏的东西,如果我能把它放进去,会让我的浏览器下载文件吗?问题可能是因为我正在进行 AJAX 调用而不是直接链接到 PHP 页面吗?谢谢。

标签: phpjqueryajaxphpexcel

解决方案


事实证明我的怀疑是正确的,并且您不能使用 AJAX 下载文件。我所做的是摆脱了 JQuery 的“点击”事件,并将其替换为“导出到 Excel”图标周围的锚标记,该标记具有指向生成和下载 Excel 文件的 PHP 文件的链接以及足够的参数以允许PHP 代码重新查询数据库并重建我想要导出的表,而不是将表包含在发送的数据中。


推荐阅读