【问题标题】:Pass data from view to controller via ajax通过ajax将数据从视图传递到控制器
【发布时间】: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();。它又快又简单。还可以在表单的输入标签中添加名称。

标签: php jquery ajax csv


【解决方案1】:

你可以试试:

    $.ajax({
       type:"POST",
       url:'save-csv-file',
       data: {data: data},
       success: function(response){
           //do success action here
       }
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 2020-06-08
    • 2016-07-08
    • 2015-04-08
    相关资源
    最近更新 更多