Man*_*yen 4 php export-to-csv laravel laravel-5 maatwebsite-excel
我有一个导出 csv 功能,它在 Laravel 上运行良好。但是现在我想通过ajax调用导出函数并使用方法post,但是我没有响应。我可以从 laravel 控制器发送一个变量来响应,但不能发送文件下载。
这是我的代码:
路由文件
Route::get('/title/show', 'TitleController@show');
Route::post('/title/show', 'TitleController@exportFromDB');
Run Code Online (Sandbox Code Playgroud)
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;
}
})
})
})
Run Code Online (Sandbox Code Playgroud)
标题控制器.php:
$dataExport['Oversea'] = $dataOversea;
$this->titleRepository->export('csv', $properties, $dataExport);
Run Code Online (Sandbox Code Playgroud)
标题库.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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我该如何修复它们?谢谢 !
小智 6
尝试这个 -
不要在您的控制器方法中编写导出代码,而只需将 excel 文件保存在您的公共文件夹中。
您的控制器方法应返回文件名。
在你的 ajax 成功时这样做 -
location.href = path/to/file/property_title.xls
所以更换你的这一行
->export($type);
Run Code Online (Sandbox Code Playgroud)
和
->store($type, 'public/reports/', true);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8768 次 |
| 最近记录: |