首页 > 解决方案 > 如何使用按钮将 PHP 数组导出到 csv 文件?

问题描述

我的页面上有 3 个图表,它们由 3 个 php 数组组成。我想通过单击每个图表下方的按钮来打印此数组的数据。我可以在文件中再次执行所有查询,这将打印 csv 文件,但我想这样重复代码是不必要的。我尝试将数组数据放在隐藏的输入上,首先用 json_encode 转换它们,然后在 JS 中通过单击这些按钮将得到它并通过 ajax 将其发送到文件,然后将它再次转换为带有 json_decode 的 PHP 对象,然后制作csv 来打印它。好吧,它不起作用,我不知道为什么。以下是相关代码:

...
<canvas id="1" width='60%' height='15%'></canvas>
<input type="hidden" id="dataCanvas1" value="<?=htmlspecialchars(json_encode($valores1, JSON_UNESCAPED_SLASHES))?>">
<button type="button" class="btn btn-info" onclick="bajarCSV('dataCanvas1')">Bajar CSV</button>
...
<script>
function bajarCSV(id){
        var array = $("#"+id).val();
        $.ajax({
          data: {
            "array": array
          },
          dataType:"json",
          url:  "acciones/bajarCSV.php",
          type:  'post'
        });
      }
    </script>

这是“bajarCSV.php”代码:

$array = json_decode($_REQUEST['array'], TRUE);

header("Content-Disposition: attachment;filename=data.csv");
header("Content-Transfer-Encoding: binary");

ob_start();
$output = fopen('php://output', 'w');
fputcsv($output, array('Fecha','Valor'));

// loop over the rows, outputting them
foreach($array as $element) {
  fputcsv($output, $element);
}

fclose($output);
return ob_get_clean();

这是一个如何在“bajarCSV.php”上形成结果数组的示例

array (size=184)
  0 => 
    array (size=2)
      'x' => string '2019-10-02 11:30:00' (length=19)
      'y' => int 9266
  1 => 
    array (size=2)
      'x' => string '2019-10-02 11:33:00' (length=19)
      'y' => int 7831
  2 => 
    array (size=2)
      'x' => string '2019-10-02 11:36:00' (length=19)
      'y' => int 7649
  3 => 
    array (size=2)
      'x' => string '2019-10-02 12:57:00' (length=19)
      'y' => int 8509
  4 => 
    array (size=2)
      'x' => string '2019-10-02 13:00:00' (length=19)
      'y' => int 8815
  5 => 
    array (size=2)
      'x' => string '2019-10-02 13:03:00' (length=19)
      'y' => int 8666
  6 => 
    array (size=2)
      'x' => string '2019-10-02 11:42:00' (length=19)
      'y' => int 9064
  7 => 
    array (size=2)
      'x' => string '2019-10-02 11:45:00' (length=19)
      'y' => int 9013
...

基本上,问题是,当我单击按钮时,AJAX 会执行,但没有返回任何内容,也没有错误,也没有打印的 csv 和下载。

我希望这一切都得到很好的解释,谢谢。

更新 1

尝试了 fetch 方法,但我不能/不知道如何将我的 JSON 数组发送到页面,以形成 csv 文件,因此 csv 结果现在填充了错误页面的 html 代码。

标签: javascriptphpjsonajaxexport-to-csv

解决方案


推荐阅读