下载 csv 文件作为 AJAX 请求的响应

2024-02-17

我有一个名为“/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 导出按钮。


在现代浏览器中,您可以通过使用文件内容(在您的情况下由 Ajax 接收)创建 Blob、为其创建 URL 并使用download属性:

const saveData = (function () {
    const a = document.createElement("a");
    document.body.appendChild(a);
    a.style = "display: none";
    return function (data, fileName) {
        const blob = new Blob([data], {type: "octet/stream"}),
            url = window.URL.createObjectURL(blob);
        a.href = url;
        a.download = fileName;
        a.click();
        window.URL.revokeObjectURL(url);
    };
}());

const data = 'a,b,c\n5,6,7',
    fileName = "my-csv.csv";

saveData(data, fileName);

JSFiddle https://jsfiddle.net/zzapxtem/2/

如果您的 Ajax 端点 URL 具有正确的标头(或者即使它不是,只要您使用download属性),您可以放弃 Blob 和 Ajax,只需将 URL 添加到具有下载属性的链接即可。改编@pritesh的代码,

const saveData = (function () {
    const a = document.createElement("a");
    document.body.appendChild(a);
    a.style = "display: none";
    return function (url, fileName) {
        a.href = url;
        a.download = fileName;
        a.click();
    };
}());

const url = 'http://www.sample-videos.com/csv/Sample-Spreadsheet-10-rows.csv', // Replace with your own URL: window.location + "/downloadUserAction?draw=3&search%5Bvalue%5D=NLP_SEARCH&order%5B0%5D%5Bcolumn%5D=6&order%5B0%5D%5Bdir%5D=desc"
    fileName = "my-csv.csv";

saveData(url, fileName);

JSFiddle https://jsfiddle.net/mb5qdaua/2/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

下载 csv 文件作为 AJAX 请求的响应 的相关文章

  • TypeError document.querySelector(...) 为 null

    我正在做 FF 扩展 但遇到了障碍 这是我所拥有的 var canLink document querySelector link rel service href 这会找到一个带有 rel service 的链接 效果很好 但是 如果该页
  • 是否可以将 SVG 对象的自定义属性设置为数字而不是字符串?

    我正在为 SVG G 元素 SVG 组对象 分配人工属性 我通过 SVG 转换移动该组及其内容 并将该组的 x y 坐标及其宽度 高度存储在这些属性中 我正在使用 D3 Javascript 库和调用 embeddedElemContain
  • crypto-js 中的 AES 解密返回空字符串

    我正在尝试将加密数据存储在 localStorage 中 并在需要时使用 crypto js 对其进行解密 这是加密函数 const passphrase CryptoJS enc Utf8 parse key const iv Crypt
  • 发送电子邮件的 Google Apps 脚本语法错误。无法识别我的问题

    我正在尝试让 Google 工作表从工作簿中另一张工作表的长列表中发送个性化电子邮件 我使用了教程 因为我是所有编码语言的认证新手 但 AppScript 告诉我第 4 行有语法错误 我一生都无法弄清楚我做错了什么 但我确信当由具有这些合法
  • 为什么我在 ECMAScript / ActionScript 3 中看到不精确的浮点结果?

    大家好 让我们直接跳到代码示例 以展示 ECMAScript JavaScript AS3 如何无法正确执行简单的数学运算 AS3 对 Number 类使用 IEEE 754 双精度浮点数 据说与JavaScript 中使用的 trace
  • Collada 模型面在 Three.js 中无法正确显示

    将 collada 模型导入到 Three js 后 模型的某些面只能从模型内部看到 从外部看不到 如何解决相关面孔的问题 是否可以让模特的脸部从两侧都可见 它无法正常工作的原因是您的文件设置了此双面标志
  • 如何使单词中的每个字母在悬停时发生变化

    假设我的网站上某个段落中有一个单词 IamGreat 我希望它在悬停时更改为 Good4you 但是 我不想更改整个单词 而是希望每个字母单独更改 因此 如果我将鼠标悬停在字母 I 上 它将变成字母 G 字母 r 将变成数字 4 等 这两个
  • Apache 服务器上的服务器端 Javascript

    我们打算使用Apache https httpd apache org 用于 Web 开发的服务器 对于服务器端脚本 我们希望使用服务器端 javascript 要使服务器端 javascript 在 Apache 服务器上工作需要什么 S
  • Vue 多个组件位于一个包/文件中

    假设我想创建一个 UI 包 如何将多个组件放入一个 JS 文件中 通常我会将不同的组件放在不同的文件中 import ButtonText from ButtonText vue import ButtonIcon from ButtonI
  • jQuery 选择器在控制台中不起作用

    我一辈子都无法解决这个问题 我正在运行 js 容器状态 是页面上正在运行的 js 的控制台日志 它显示一个选择器 但如果我想在控制台中执行任何操作 它只会返回 null 我假设我在某个地方过度编写了 jQuery 函数 就好像我调用了 jQ
  • AngularJS Youtube 播放器嵌入非常大的播放列表

    我目前正在构建一个 AngularJS 应用程序 我知道它有点过时 但我对它很有信心 我的应用程序需要嵌入一个 YouTube 播放器 其中包含一个非常大的播放列表 大约 1500 个项目 但我无法对其进行编码 以便它实际上可以嵌入超过 2
  • 在 JavaScript/ActionScript 中重新定义 Math.constructor 有任何实际用途吗?

    Math 对象没有原型属性 但有构造函数属性 在任何情况下重新定义构造函数会有用吗 The Math对象 准确地说 由初始值引用的对象MathECMAScript 全局对象的属性 not have a constructor属性 请参阅EC
  • 谷歌地图API v3如何获取所有形状的坐标

    我有这个谷歌脚本 可以创建形状和删除形状 但没有太多关于保存形状的信息 我查了一下互联网 知道我可以通过 overlaycomplete 中的 getpaths 访问路径坐标 而且我还可以将坐标推入一个收集所有形状的数组中 但是 如果用户删
  • iOS 11 getUserMedia 不起作用?

    苹果公司发表声明称getUserMedia将在 iOS 11 上完全正常运行 安装 iOS 11 Beta 版本 5 后 我确实收到一条消息 表明我的网站请求访问我的相机和麦克风 但似乎是这样的 video src window URL c
  • Electron Auth0Lock“原始文件://不允许”

    尝试让 auth0 与我的电子应用程序一起使用 当我按照默认教程并尝试使用用户名 密码 身份验证进行身份验证时 锁定失败并显示 403 错误 并响应 不允许使用 Origin file 我还在 auth0 仪表板中客户端设置的允许来源 CO
  • jQuery可排序发布数据,但没有数据

    谁能告诉我我在这里缺少什么 我的数据似乎总是空的 我做错了什么 document ready function nav sortable connectWith nav axis y update function event ui var
  • (A == B == C) 比较在 JavaScript 中如何工作?

    我预计以下比较会给出错误 var A B 0 if A B 0 console log true else console log false 但奇怪的是它又回来了false 更奇怪的是 console log A B 1 returns
  • Angular Material 10 范围 datepicker 和 moment.js 错误:date.getFullYear 不是函数

    尝试使用 moment js 的 rangePicker 选项来实现 Angular Material v10 datepicker 但是当我将 moment 与 rangePicker 结合使用时 它给了我这个错误 Error date
  • 查看元素的所有 dom 事件

    我有一个 jQuery UI 日期选择器 当您单击日期时 它会清除我的 URL 哈希值 并且不会更改文本框中的日期 我假设某个地方还有其他一些 JavaScript 实用程序 它也正在调用某种委托事件 抛出错误并终止 jquery 处理程序
  • 在 Javascript 中动态创建 []array

    也许这将是一个真正愚蠢的问题 但我是 JavaScript 新手 并且坚持动态创建数组 如下格式 items Date 2012 01 21T23 45 10 280Z Value 7 Date 2012 01 26T23 45 10 28

随机推荐

  • 是否有直接指示 RESPONSE.REDIRECT 转到上一页?

    我有一个 Web 应用程序 服务台票证系统 带有一个收件箱来监视传入的请求 并制作了一些过滤按钮来帮助用户根据请求者姓名 创建日期等来安排请求 每个过滤器都会简单地调用同一页面 但会向查询字符串添加一些代码 例如 如果用户按下标有 Sort
  • 在 jinja2 循环中对 dict 的 dict 进行排序

    我如何对字典进行排序 my dict abc name B is sth True xyz name A is sth True by name在金贾 我试过了 for id data in my dict dictsort by valu
  • Python ImportError 没有名为 crypto.PublicKey.RSA 的模块

    当我尝试执行 python 程序时 我从终端得到这个 Traceback most recent call last File ring py line 1 in
  • 使用副本的 Microsoft.Web/sites/hostNameBindings 资源的 ARM 模板部署

    我对一系列 Azure 数据中心位置使用复制操作 以便为每个位置部署应用服务计划和网站 我能够创建流量管理器配置文件并使用复制对象将每个位置的端点添加到流量管理器配置文件中 当我尝试将每个网站的 CNAME 设置为我的自定义域名时 请按照说
  • 如何使用 don't cares 参数化 case 语句?

    我有一条称为输入的电线 我想检测前导的数量 我正在尝试创建一个模块 该模块使用下面的 case 语句根据前导零的数量更改输出数据 然而 输入的大小是可参数化的 如果 X 是固定值 4 我将创建一个 case 语句 case input 4
  • 客户端服务器端模板nodejs

    我正在使用 Node js 开发一个 Web 应用程序 我最初只想使用服务器端 hbs 模板 但后来我发现了客户端模板的主干 我发现它可以从服务器获取数据 然后使用 hbs 模板显示它 而不是服务器端生成整个 html 页面并发送 但后来我
  • 有没有比升级到 Visual Studio 2010 Ultimate 更便宜的负载测试方法

    我有 Visual Studio 2010 Professional 许可证 所以 Ultimate 还很遥远 我想要的只是进行几周左右的负载测试 有没有一种更便宜的方法来获得 VS2010 Ultimate 的负载测试部分 或者具有负载测
  • 存储库应该实现 UnitOfWork 吗?

    在 DDD 模式中 工作单元应该与存储库耦合吗 我见过几个不同的示例 包括实现工作单元接口的存储库 实现工作单元本身行为的存储库 以及具有表示工作单元的属性以便可以在各个工作单元之间共享的存储库 UoW 生命周期内有多个存储库实例 对于后者
  • MBProgressHud 与 gif 图像

    我可以使用 gif 图像代替默认加载指示器吗 到目前为止我正在使用这段代码但没有得到任何结果 谁能建议这段代码有什么问题吗 import UIImage GIF h void showLoadingHUD NSString title se
  • 启用 mod_http2 并在conf文件中设置协议后,HTTP/2配置未运行[重复]

    这个问题在这里已经有答案了 在看似正确的安装之后 HTTP 2 似乎并未运行 我运行的是 CentOS 7 我安装了最新版本的 Apache 版本 httpd 2 4 35 5 el7 x86 64 并一直在尝试让 HTTP 2 正常工作
  • 自定义实体具体化

    有没有办法使用 EF6 注入自定义对象实例创建器 我需要做的是在矩阵化发生之前向 EF 提供实体实例 基本上我希望能够使用非无参数构造函数定义 POCO 实体 以便能够使用 DI 聚合 最终使用 EF 进行持久化 我知道我可以使用对象物化事
  • HTML 表单只读 SELECT 标签/输入

    根据 HTML 规范 selectHTML 中的标签没有readonly属性 只有一个disabled属性 因此 如果你想阻止用户更改下拉菜单 你必须使用disabled 唯一的问题是禁用的 HTML 表单输入不会包含在 POST GET
  • 如何使用多个其他列中的所有非 NA 值创建新列?

    我想创建一个列 d 其中包含其他列中的所有非 NA 值 我尝试了 ifelse 但无法弄清楚如何使其以正确的方式嵌套 以便也包含 c 列中的值 也许应该使用 ifelse 之外的其他东西 这是一个 虚拟 数据框 a lt c NA NA N
  • Chart.js 中的水平条形图

    我正在尝试使用 Chart js 2 3 0 绘制水平条形图 var MeSeContext document getElementById MeSeStatusCanvas getContext 2d var MeSeData label
  • 成员函数 .begin() 和 std::begin()

    调用成员函数 begin of std vector and std begin 右值会导致不同的输出 如以下测试所示 vector
  • 如何在 Python 2.7 中使用函数注释

    我在Ipython中看到了这个源代码 https github com ipython ipython blob e1e2e960315f0f98703f6b8b077b10c99d04d70a IPython core completer
  • 如何在 Android 的 Spinner View 中添加左侧可绘制元素

    您好 我正在尝试添加左侧可绘制对象Spinner但我没有找到任何属性 就像你在EditText using android drawableLeft drawable password drawable 有没有正确的方法可以实现相同的目标S
  • 如何在 Codeigniter 中播种数据

    迁移后如何在 CodeIgniter 中播种数据 迁移完成后 我想在表用户迁移后植入一些预定义用户 defined BASEPATH OR exit No direct script access allowed class Migrati
  • 如何在sql中获取上周的最后一天?

    如何在sql中获取上周的最后日期 我的意思是使用查询的上周日日期 无论实际的 DATEFIRST 设置如何 上周日都可以这样找到 SELECT DATEADD day 1 DATEPART weekday GETDATE DATEFIRST
  • 下载 csv 文件作为 AJAX 请求的响应

    我有一个名为 downloadUserAction 的端点 用于收集数据并下载 csv 文件 我面临的挑战是 使用单击功能上的按钮调用端点时不会下载该文件 但只有当我直接在浏览器中访问端点时才会下载该文件 经过研究 我发现不能使用 AJAX