【问题标题】:Downloading CSV via AJAX通过 AJAX 下载 CSV
【发布时间】:2010-10-14 21:45:20
【问题描述】:

您可以使用 AJAX 从 Web 应用程序下载生成的 csv 文件吗?如果是这样,是否有人有任何可以指向我的参考?

编辑:对不起,我应该提到我正在使用 Prototype 的 Ajax.Request,我查看了 firebug 的响应工具,生成的 CSV 是响应,我只需要在生成后弹出保存文件选项即可通过 Ajax.Request

【问题讨论】:

    标签: ajax prototypejs lowpro


    【解决方案1】:

    这是 Ajax 请求的一个已知限制,您需要使用 JS,例如:

    window.location='download-csv.rb';
    

    而不是使用 Ajax 请求。另一种方法是更改​​隐藏 iframe 的位置,但这有它自己的优点/缺点。

    无论您发送什么 HTTP 标头,您都不会收到显示“文件保存”对话框的 Ajax 请求。

    【讨论】:

      【解决方案2】:

      根据您的最新编辑,要让您的 CSV 文件触发文件下载(而不是在浏览器中呈现),不需要 Ajax。

      相反,解决方案是让您的后端系统在请求 CSV 文件时添加此 HTTP 标头:

      Content-disposition: attachment; filename=<your_filename.csv>;
      

      您在此处的实现取决于您使用的后端系统。如果您使用的是 Rails(正如您的用户名所暗示的那样),请从这里开始:

      filename = 'your_filename.csv'
      headers['Content-Type'] = 'text/plain'
      headers['Content-Disposition'] = "attachment; filename=\"#{filename}\""
      render :layout => false
      

      【讨论】:

      • 我们在生成 CSV 的过程中使用 AJAX 隐藏链接,下载没有 AJAX 的文件不是问题,并且已经由应用程序完成,我们需要隐藏链接以阻止用户多次点击该链接。
      • 尝试使用 $('#link').click(function(){$(this).hide()});
      • 显然应该是 $(this).remove();
      【解决方案3】:

      下载不是问题;您可以通过 XmlHttpRequest 下载您喜欢的任何数据。困难的部分是解析它。解析它有多种方法,从正则表达式到字符串索引。

      【讨论】:

        【解决方案4】:

        您可以使用“AJAX”来下载任何东西。有些人会说在这种情况下您不应该将其称为 AJAX,因为该术语专门用于下载 XML。但实际上,它只是一种无需重新加载页面即可将数据输入客户端的机制。如果您正在加载 HTML,它会被称为 AHAH,对于 CSV,我猜您会称它为 AHAC 或 AJAC? ..

        【讨论】:

          猜你喜欢
          • 2016-06-03
          • 2023-03-16
          • 2019-10-27
          • 1970-01-01
          • 2020-10-15
          • 2020-01-21
          • 2016-07-08
          • 2012-08-26
          • 2014-03-19
          相关资源
          最近更新 更多