2017-09-26 101 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 
     } 
    }); 
相關問題