У меня есть 3 диаграммы на моей странице, они сделаны из 3 массивов php. Я хотел бы распечатать данные этого массива, нажав кнопку под каждой диаграммой. Я мог бы сделать все запросы снова в файле, который будет печатать CSV-файл, но я думаю, что такой повторяющийся код был бы излишним. Я попытался поместить данные массивов на скрытые входы, сначала преобразовав их с помощью json_encode, а затем в JS, нажав эти кнопки, получу их и отправлю через ajax в файл, который снова преобразует их в объект PHP с json_decode и затем создаст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
Попробовал получить извлечение, но я не могу / не могуНе знаю, как отправить мой JSON-массив на страницу, чтобы сформировать из него файл CSV, поэтому полученный в результате CSV-файл теперь заполнен HTML-кодом страницы ошибки.