[英]Convert database query results to excel and allow download from ajax call
我已经浏览了一些类似的问题,但是找不到我想要的东西(请不要将其标记为重复,因为我确实尝试在未发布问题的情况下找到答案)
当用户单击按钮时,ajax请求将发送到控制器,在控制器中我将从模型中获取数据。 然后,我将其转换为csv格式,并且在ajax调用成功后,我希望下载该文件。 除了下载部分,我所有工作正常。 我看过一些示例,其中您仅重定向但不下载任何内容,它显示了包含结果的新页面。
$( '.spExcel' ).on('click', function() {
$.ajax({
url: url + '/Widgets/exportSpExcel',
type: 'POST',
})
.done(function (data) {
window.location.assign(data);
})
});
PHP:
if($_SERVER['REQUEST_METHOD'] === 'POST') {
$results = $this->DashboardModel->listPeople();
$filename = 'People_' . date('dmY') . '.csv';
header("Content-Description: File Transfer");
header("Content-Type: application/csv");
header("Content-Disposition: attachment; filename=$filename");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
$handle = fopen('php://output', 'w');
$header = array("Name", "Contact Number");
fputcsv($handle, $header);
foreach ($results as $result):
fputcsv($handle, $result);
endforeach;
fclose($handle);
}
Ajax无法编写下载的文件-浏览器必须自己执行。 您可以使用window.open()
但这将在新的选项卡或窗口中打开文件,然后将其立即关闭。 看起来很凌乱-可行,但并不理想。
解决此问题的最简单方法是使链接直接下载响应,而无需尝试使用Ajax。 更改链接以适合您的需求,但这将是这样的……
<a href="/Widgets/exportSpExcel" class="spExcel" download>click to download</a>
只需将download
属性添加到链接。 真的就是这么简单:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.