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 页面?谢谢。

解决方法

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