如何导出,然后在php中用后台下载ajax调用的excel文件

我必须导出excel格式的大文件并下载它。 我正在使用PHP的Excel。 文件非常大,所以需要花费很多时间才能导出 。 所以我使用asynchronousAJAX调用,并在服务器端,我使用session_write_close。 通过这我可以发送并发calls.this工作正常,如果我留在同一页面…但是当我发送ajax调用导出和下载文件,然后我redirect到一个新的页面,然后完成该ajax调用ajax调用被取消,无法下载文件。 即使在用户被redirect到一个新的URL后,我如何导出一个文件,然后下载它。

有多种方法可以在同一页面上执行下载操作。 使用asynchronous可能会导致问题,您的应用程序可能会感觉Ajax操作之间的差距。

根据我的意见,你可以用这种方式做你的ajax请求。

如果可能的话,创build文件使用命令行方法。 或者你可以使用curl或elinks命令简单地使用system命令,并传递正在使用的url来生成excel文件。

 curl http://mysite/generate/excel?id=123 

要么

 elinks http://mysite/generate/excel?id=123 

通过使用ajax(sync),您可以使用保持活动的选项进行请求,并在代码内部检查文件是否以某个间隔创build。 你的代码将是这样的

 while (!file_exists("path/to/excel_file.xlsx")) { usleep(2000); } echo json_encode(["status" => true, "file_url" => "http://mysite/url/to/excel_file.xlsx"]); 

一旦你从ajax得到响应,在成功函数调用下面的函数与文件url通过iframe下载文件在同一页上。

 downloadAttachment(response.file_url) /* Amazing download management with error handling */ var downloadAttachment = function(link){ var iframe = document.createElement("iframe"), iframeWindow; iframe.src = link; document.body.appendChild(iframe); iframe.onload = function(){ response = JSON.parse($(iframe).contents().text()) if(!response.status) { alert(response.message); $(iframe).remove(); } } setTimeout(function(){ $(iframe).remove(); },10000) } 

如果要花费很长时间才能生成大文件,这是合理的stream程。