javascript - 如何使用按钮将 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 代码。
解决方案
推荐阅读
- vba - 根据将定义日期范围的 2 个输入框,将一个选项卡中的表中的所有数据复制到同一工作簿中的另一个选项卡中
- node.js - Firebase 函数 shuffle firestore 数组 onUpdate
- python - 子类 QLineEdit 并在下面添加标签
- reporting-services - 特别是在 SSRS tablix 中的非换行连字符
- javascript - 有没有办法检查安装在用户机器上的应用程序的版本?
- reactjs - 如何从 YouTube 网址中获取 YouTube 缩略图?
- python - 管理面板中的评论已添加,但在网站上不可见
- python - 有没有办法使用机器人框架中的 for 循环将多个值保存在一个变量中?
- c++ - 如何访问 cv::Point_ 中的每个数字元素
类型? - database - Github 问题 ID 是如何生成的?