【发布时间】:2017-09-26 07:38:03
【问题描述】:
我想将一些数据从视图传递到我的控制器并从中创建CSV 文件。我在view 中创建了这段代码:
Button 生成 CSV:
<a class="btn btn-primary" href="#" id="save-csv">Save to CSV</a>
视图的其余部分:
<script type="text/javascript">
var oUrl = '<?= $this->url('application/infraplk', array()); ?>';
var projects = JSON.stringify(<?php echo json_encode($this->projects) ?>);
var podmiot = JSON.stringify(<?php echo json_encode($this->podmiot) ?>);
$('#save-csv').on('click', function () {
var podmiotCSV = $('#type-select-Podmiot').val();
var projektCSV = $('#type-select-Projekt').val();
var typCSV = $('#type-select-Typ').val();
var statusCSV = $('#type-select-Status').val();
var errorsCSV = $('#type-select-Błędy').val();
var data = [];
if (podmiotCSV)
data.push(podmiotCSV);
if (projektCSV)
data.push(projektCSV);
if (typCSV)
data.push(typCSV);
if (statusCSV)
data.push(statusCSV);
if (errorsCSV)
data.push(errorsCSV);
//alert(data.length);
$.ajax({
type: "POST",
url: 'save-csv-file',
data: data
});
});
</script>
这是我的模型:
<?php
public function getValueToSaveCsv(array $data) {
//FOR EXAMPLE
print_r($data[0]);
}
?>
还有我的控制器:
<?php
public function saveCsvFileAction(array $data) {
header("Content-Type: text/csv");
header("Content-Disposition: attachment; filename=infraplk.csv");
$data = $_POST;
$model = new \Application\Model\InfraPlk($this->getDbCbkAdapter());
$rows = $model->getValueToSaveCsv($data);
$fp = fopen("php://output", 'w');
fputcsv($fp, array_keys(get_object_vars($rows[0])));
foreach ($rows as $row) {
fputcsv($fp, get_object_vars($row));
}
fclose($fp);
$result = new ViewModel(array(
));
return $result->setTerminal(true);
}
?>
这是我第一次使用 AJAX。而且真的不知道该怎么办。有人可以帮忙吗?
【问题讨论】:
-
您要通过 ajax 发送的数据应该是一个对象,目前是它的数组。
-
在我读过的文档中,
data可以是PlainObject or String or Array -
参数可以是数组。但是数据需要是对象的形式。试试这个:数据:{data:data}
-
在 ajax 中使用数据:$("formname").serialize();。它又快又简单。还可以在表单的输入标签中添加名称。