'exported' csv 数据出现在我的 Firefox 控制台日志中,而不是导出的 .csv 文件中 (Yii 1.x)

'exported' csv data appears in my Firefox console log rather than an exported .csv file (Yii 1.x)

我有一个表单,一旦提交就会从我的数据库中提取一些数据,我试图将这些数据立即下载到 csv 文档中。

出于某种原因,数据都很好,采用正确的 csv 格式,但它只出现在我的 Firefox 浏览器的控制台日志中,而不是自动下载的文件,例如 exported.csv

我有以下功能 - 我没有收到任何错误,因为一切正常,但由于某种原因它不会自动下载 csv。我认为我的问题出在我的 outputCsv 函数中。

有什么想法吗?

public function actionSurveyStats()
{
    $id = Yii::app()->getRequest()->getQuery('id');
    $model = SurveyQuestionnaires::model()->findByPK($id);

    $this->bodyTitle = 'Your Survey';

    if (isset($_POST[get_class($model)])) {
        set_time_limit(0);
        ini_set('memory_limit', '786M');
        $filename = 'questionnaire_' .time(). '.csv';
        $completed->questionnaire_id = Yii::app()->request->getPost('questionnaire_id');
        $organisation_id = $_POST[get_class($model)]['organisation_id'];
        $this->outputCsv($model->getExportData($organisation_id), $filename);
    }

    $this->render('survey_stats',array(
        'model' => $model,
    ));
}


protected function outputCsv($rows, $filename = '') {
    if (empty($filename)) {
        $filename = (!is_null($this->model)) ? (strtolower(get_class($this->model)."_".$this->model->getPrimaryKey().".csv")) : "export.csv";
    }

    header('Content-Description: File Transfer');
    header("Content-Type: application/csv") ;
    header("Content-Disposition: attachment; filename=$filename");
    header("Pragma: no-cache");
    header("Cache-control: private");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

    $fp = fopen('php://output', 'w');
    foreach($rows as $row) {
        fputcsv($fp, $row);
    }

    echo stream_get_contents($fp);
    fclose($fp);

    app()->end();
}

我的修复...是表单中的 ajax.. 将其设置为 false 并且现在可以使用了!谢谢 Yogesh

只需要将 'enableAjaxValidation' 设置为 false。

<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm',array(
'id'                    => get_class($model),
'type'                  => 'horizontal',
'enableAjaxValidation'  => false,
'clientOptions'         => array(
    'validateOnSubmit'      => true,
    'validateOnChange'      => false,
    'validateOnType'        => false,
),
'htmlOptions'       => array(
    'class'                 => '',
    'autocomplete'          => 'off',
    'enctype'               => 'multipart/form-data'
),
)); ?>