【问题标题】:AJAX call to download a CSV fileAJAX 调用以下载 CSV 文件
【发布时间】:2014-05-27 21:20:04
【问题描述】:

我有一个下载摘要页面,在用户选择要包含在 csv 文件中的特定元素后加载。我想向用户显示摘要页面并自动开始下载。由于摘要和 csv 导出都需要大部分相同的代码,因此我将其放在同一页面上。我在初始加载后使用参考代码附加到 post 数组。因此,如果 post 数组包含参考代码,它会执行 csv 的代码,否则它会执行摘要显示的代码。我在页面加载时使用 ajax 帖子执行此操作。一切都很好,除了它返回 csv 的原始数据流并且没有将其放入文件中。有没有人对我如何做到这一点有任何想法?

另外我应该提到我的初始表单非常复杂,并且有许多嵌套字段,因此循环通过 post 数组并创建隐藏字段不是一个好的解决方案。

感谢您对此的任何帮助。

【问题讨论】:

  • 我认为你把这个复杂化了。只需将页面位置更改为 csv 文件的路径(在任何情况下),页面将立即显示文件对话框提示,而无需更改页面并保留所有表单设置。

标签: javascript php ajax csv


【解决方案1】:

尝试在 javascript 中打开一个窗口而不是 ajax 调用。这将使浏览器尝试下载 CSV,而不是尝试在 javascript 中读取 CSV。下载开始时,浏览器将停留在同一页面(摘要页面)上。

【讨论】:

  • 我尝试在新窗口中加载 ajax 结果,但结果相同。你说的是这个吗?
  • 是的,这就是我要说的。如果要从 php 输出 CSV,则需要发送标头。 stackoverflow.com/questions/398237/how-to-use-the-csv-mime-type
  • 是的,这是我的 csv 导出代码。但它仍然不起作用。 // 导出导出数组 header('Content-Type: application/excel'); header('Content-Disposition: attachment; filename="'.$this->request->post['run_id'].'.csv"'); $file = fopen("php://output","w"); foreach ($export as $design){ foreach ($design as $line){ fputcsv($file,explode(',',$line)); } } fclose($文件);死;
  • 尝试发送 Content-Type: text/csv 作为内容类型,然后是 application/excel。浏览器将尝试查找带有 .xls 或 .xl 然后 .csv 的文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2011-11-26
  • 2013-02-26
  • 2023-03-16
  • 2017-08-23
相关资源
最近更新 更多