2017-09-26 227 views
0

我想将视图中的一些数据传递给我的控制器,并从中创建CSV文件。我在view创建此代码:通过ajax将数据从视图传递到控制器

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。真的不知道该怎么做。有人可以帮忙吗?

+0

你的数据应该是一个对象,它此刻阵列。 –

+0

在我已经读过的文档中,'data'可以是'PlainObject或者String或者Array' – speedvees

+0

这个参数可以是数组。但数据需要以对象的形式存在。试试这个:data:{data:data} –

回答

0

您可以尝试:通过AJAX发送

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