繁体   English   中英

如何在 Laravel 中通过 Ajax 下载 Excel 文件?

[英]How to download Excel file by Ajax in Laravel?

我使用这个来导出 Excel

我向端点发送 POST 请求,其中方法检索数据并创建文件:

return Excel::download(new EventsExport($request), $filename);

问题是我将此文件作为二进制文件作为响应,而浏览器没有开始下载它。

如何解决?

如果您将请求作为来自 SPA 的 AJAX 请求发出,则下载将不会开始。 您需要让端点接受 GET 请求并将用户链接到该 URL,或者将表单嵌入到您的 SPA 应用程序中,该表单将对端点执行正常的 POST。

我对 angular 一无所知,但如果你在 laravel 中,你可以,

向您的控制器调用 ajax 请求

然后用您的数据创建一个临时的 excel 文件。

然后只需通过此标题下载它。

header('Content-Type: text/csv'); echo file_get_contents('your_file_location_url');

如果您愿意,请取消链接您的临时文件

我认为正确的方法是将它存储在您的服务器上并将链接发送到您的 ajax 请求:

return response()->json([
    'url' => 'url-to-stored-file'
]);

在 AJAX 响应中,您可以执行以下操作:

function(data) {
    window.location.href = data.url;
}

我知道这不是最好的方法,但它有效

经过一番挣扎,这里是我找到的最简单的解决方案

您的控制器

return Excel::download(new EventsExport($request), $filename, null, [\Maatwebsite\Excel\Excel::XLS] );

你的前端

 var data = match=3&win=false; //example
 var url = "{{route($routeForYourExcel)}}?" + data;
 window.open(url, '_blank');

希望有帮助

$.ajax({
     type : 'GET',
     url : '/download-excel',
     success:function(){
         window.location.href = '/download-excel';
     }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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