【发布时间】:2019-12-20 22:07:01
【问题描述】:
我正在尝试使用 Laravel Excel 包 https://docs.laravel-excel.com 导出 CSV。 我需要在使用 ajax 请求时传递一些变量,这一切正常,但响应没有下载 CSV。
我在一些没有 ajax 的地方使用了这个包,只是一个简单的导出,它一切正常,所以我知道那一面很好。
这是我用来发送数据的 ajax:
$(document).ready(function() {
$( "#export" ).on( "click", function() {
let clubInfo = $("#clubInfo select").val();
let funderInfo = $("#funderInfo select").val();
$.ajax({
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
type: 'post',
url: '{{route('export')}}',
data: {club : clubInfo, funder: funderInfo},
}).done(function(response) {
console.log(response);
}).fail(function() {
console.log("Failed");
});
});
});
这是处理导出的控制器:
public function adminExport(Request $request)
{
$club = $request->input('club');
$funder = $request->input('funder');
return Excel::download(new UsersExport($club, $funder), 'users.xlsx');
}
我没有收到任何 PHP 错误或警告,这一切都很好,我只是在网络选项卡中收到了一个响应,看起来像是它只是没有下载的 csv。 响应的标题是:
Accept-Ranges: none
Cache-Control: public
Connection: keep-alive
Content-Disposition: attachment; filename=users.xlsx
Content-Length: 6812
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
【问题讨论】:
-
这些是作为 ajax 响应的标头。您必须自行触发下载。如果响应中有 excel 表的二进制数据,那么您可以在 javascript 中创建一个对象 URL,将此 URL 设置为锚标记,然后单击它进行下载。
-
在这种情况下不要使用 ajax 使用普通 php 简单提交表单,它会下载。
标签: php excel ajax laravel response