下载带有ajax调用的文件

Joh*_* Ng 5 javascript php ajax jquery phpexcel

我使用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');
Run Code Online (Sandbox Code Playgroud)

当我直接从浏览器打开generate_excel.php时,会下载结果文件.但是如果我对generate_excel.php进行ajax调用,我就不会得到下载提示.使用chrome开发人员工具,我可以从"网络"选项卡中看到ajax调用已成功完成,并且在响应数据中看到了一堆随机字符.我假设那是excel对象.

有谁知道如何使用ajax实现下载excel功能?我不想刷新页面.当用户点击"导出"按钮时,应该对php文件进行ajax调用并提示用户下载.

谢谢!

mao*_*ozx 9

我找了一些方法将带有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);
            }
       });
});
Run Code Online (Sandbox Code Playgroud)

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();
Run Code Online (Sandbox Code Playgroud)


Dav*_*shi 7

并非一切都应该用AJAX完成.有时普通的旧HTML更适合工作.我想你的按钮有a标签?你为什么不做这样的事

<a href="generate_excel.php" target="_blank">Export to Excel</a>
Run Code Online (Sandbox Code Playgroud)

在你的HTML?注意target="_blank"部分.它是为了确保您的页面不被重新加载.

因为input你可以使用构造

<form action="generate_excel.php" target="_blank"><input type="button">...whatever</form>
Run Code Online (Sandbox Code Playgroud)


Deb*_*yay 5

我不认为你可以通过ajax调用下载任何东西.而不是您可以生成并保存服务器(临时)中的Excel并显示用户的下载链接.


Joh*_* Ng 3

找到了一种方法来做到这一点,尽管我不确定这是否是一种理想的方法。

我在页面中添加了一个隐藏的 iframe。当ajax调用返回时,它返回创建的数据的url。我使用 javascript 将 iframe 重定向到该 url,该 url 会自动触发下载操作。