我有一个名为“/downloadUserAction”的端点,用于收集数据并下载 csv 文件。我面临的挑战是,当使用按钮点击功能调用端点时,文件不会被下载,但只有当我直接在浏览器中访问端点时,它才会下载。
经过研究,我发现了无法使用 AJAX 下载文件的结论。这是有道理的,因为当我点击我的按钮时,我看到端点被点击并且文件内容被传递到网络选项卡中,但是没有文件被下载到客户端。
这就是我在 javascript 端使用我页面上的数据表按钮插件功能来调用我的端点的全部内容。
$(document).ready(function () {
var table = $("#userActivity").on('init.dt', function() {
}).DataTable({
dom: 'Blfrtip',
buttons: [
{
extend: 'csvHtml5',
text: 'NLP Search Download',
action: function ( e, dt, node, config ) {
$.ajax({
url : window.location + "/downloadUserAction?draw=3&search%5Bvalue%5D=NLP_SEARCH&order%5B0%5D%5Bcolumn%5D=6&order%5B0%5D%5Bdir%5D=desc"
});
}
}
],
是否有另一种调用我的端点的方法会强制在客户端页面上下载?
旁注:我的数据表正在使用服务器端处理,否则我只会使用数据表 csv 导出按钮。
原文由 Daniel Gebrahanus 发布,翻译遵循 CC BY-SA 4.0 许可协议
在现代浏览器中,您可以通过使用文件内容创建一个 Blob(在您的情况下由 Ajax 接收)、为其创建一个 URL 并使用
download
属性来提示下载:JSFiddle
如果您的 Ajax 端点 URL 具有正确的标头(或者即使它不是只要您使用
download
属性),您可以放弃 Blob 和 Ajax,只需将 URL 添加到链接中下载属性。改编@pritesh 的代码,JSFiddle