【问题标题】:egyg33k Bundle , generating csv from an ajax callegyg33k Bundle ,从 ajax 调用生成 csv
【发布时间】:2018-10-12 16:33:53
【问题描述】:

我正在尝试使用我在我的 symfony 项目中使用的 egyg33k 包生成一个 csv 文件。

我有一个包含两个日期选择器输入和一个按钮的树枝。当我单击按钮时,我获取两个日期选择器的值并将它们传递给 php 操作以在查询构建器上使用它们(所有这些都有效),但文件没有开始下载。相反,我在浏览器控制台获取内容(见图) 此外,该操作在使用 ajax 之前就可以正常工作。

ajax 调用:

$(document).ready(function() {
$("#get_extract").on("click", function() {
    $.ajax({
        method: "POST",
        url: "/back-office/extraction",
        data: {
            begin_date: $("#begin_date").val(),
            end_date: $("#end_date").val()
        }
    })
});
});

PHP:

public function getExtractRecordsAction(Request $request)
{
    if ($request->isXmlHttpRequest() || $request->query->get('showJson') == 1) {
        $beginDate = $request->get('begin_date');
        $endDate   = $request->get('end_date');

        $recordsRepository = $this->getDoctrine()->getRepository(Record::class);
        $query             = $recordsRepository->createQueryBuilder('r')
             ->where('r.createdAt BETWEEN :beginDate AND :endDate')
            ->setParameter('beginDate', $beginDate)
            ->setParameter('endDate', $endDate)
            ->getQuery();

        $records = $query->getResult();
        $writer = $this->container->get('egyg33k.csv.writer');
        $csv    = $writer::createFromFileObject(new \SplTempFileObject());
        $csv->insertOne([
            'ID',
            'FIRST_NAME',
            'LAST_NAME',
            'CIVILITY',
            'PHONE_NUMBER',
            'EMAIL',
            'ZIP_CODE',
            'OPTIN',

        ]);
        foreach ($records as $record) {
            $csv->insertOne([
                $record->getId(),
                $record->getPersonalDetails()->getFirstName(),
                $record->getPersonalDetails()->getLastName(),
                $record->getPersonalDetails()->getCivility(),
                $record->getPersonalDetails()->getPhoneNumber(),
                $record->getPersonalDetails()->getEmail(),
                $record->getPersonalDetails()->getZipCode(),
                $record->getPersonalDetails()->getOptin(),

               
            ]);
        }
        $csv->output('EXAMPLE.csv');
        exit();
    }
}

【问题讨论】:

    标签: php jquery ajax symfony


    【解决方案1】:

    Ciao,请扩展你的ajax调用,它只是下载你需要的数据来强制下载文件。实际上,ajax 调用将数据从远程浏览器传输到本地浏览器,因此您只需要一种方法让浏览器将所有内容放入文件并开始本地下载(从浏览器到下载文件夹)

    $("#get_extract").on("click", function() { $.ajax({ method: "POST", url: "/back-office/extraction", data: { begin_date: $("#begin_date").val(), end_date: $("#end_date").val() }, success: function(csv_content) { let filename = 'data.csv'; let csvFile = new Blob([csv_content], {type: "text/csv"}); let downloadLink = document.createElement("a"); downloadLink.download = filename; downloadLink.href = window.URL.createObjectURL(csvFile); document.body.appendChild(downloadLink); downloadLink.click(); } })

    【讨论】:

    • 非常感谢!你让我今天一整天都感觉很好 !有效 !赶上 ! :D
    • @mblaettermann 用户需要至少 15 个声望点才能投票
    猜你喜欢
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    相关资源
    最近更新 更多