繁体   English   中英

将数据库查询结果转换为excel,并允许从ajax调用下载

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM