php - 通过 Ajax 使用 Laravel 导出 CSV

标签 php laravel laravel-5 export-to-csv maatwebsite-excel

我有导出 csv 功能,它在 laravel 上运行良好。但是现在我想通过ajax调用导出函数并使用post方法,但是我没有任何反应。我可以从 Laravel Controller 发送一个变量来响应,但不能发送文件下载。

这是我的代码:

route.php

    Route::get('/title/show', 'TitleController@show');
    Route::post('/title/show', 'TitleController@exportFromDB');

show.blade.php

<script>
$(document).ready(function () {
    $('#exportFromDB').click(function () {
        $.ajax({
            url: "",
            type: "post",
            headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
            data: {},
            success: function (response) {
                var a = document.createElement("a");
                a.href = response.file;
                a.download = response.name;
            }
        })
    })
})

TitleController.php:

    $dataExport['Oversea'] = $dataOversea;
    $this->titleRepository->export('csv', $properties, $dataExport);

TitleRepository.php

public function export($type, $properties, $data)
{
    if (in_array($type, self::EXPORT_TYPE)) {
        try {
            return Excel::create($properties['_title'], function ($excel) use ($data, $properties) {

                $excel->setTitle($properties['_title']);
                $excel->setCreator($properties['_creator'])
                    ->setCompany($properties['_company']);
                $excel->setDescription($properties['_description']);

                $excel->sheet('Sheet', function ($sheet) use ($data) {
                    foreach ($data as $item) {
                        $sheet->fromArray($item);
                    }
                });
            })->export($type);
        } catch (Exception $error) {
            throw $error;
        }
    }
}

我该如何修复它们?谢谢!

最佳答案

试试这个-

  1. 不要在您的 Controller 方法中编写用于导出的代码,而是将 excel 文件保存在您的公共(public)文件夹中。

  2. 您的 Controller 方法应返回文件名。

  3. 在您的 ajax 成功时执行此操作 -

location.href = path/to/file/property_title.xls

所以替换你的这一行

->export($type); 

->store($type, 'public/reports/', true);

关于php - 通过 Ajax 使用 Laravel 导出 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45626173/

相关文章:

php - 将查询结果作为数组返回

php - SQLSTATE[HY000] [2002] php_network_getaddresses : getaddrinfo failed: nodename nor servname provided, 或未知

php - 按产品显示使用此查询类别后,但我的网站设计消失了

mysql - Laravel sql 选择列出状态=列出的房间的用户电子邮件

php - 使用 PHPVideoToolkit 将 MP3 转换为具有单个/多个图像的视频作为视频

php - Laravel 存储 ftp 断开连接

php - 让 validate.js 工作

php - onClick 参数中带有字符串

php - 访问数据库中的列 Eloquent Laravel4

mysql - 与变量表的一对多关系