如何在php中使用jquery下载csv

时间:2011-07-21 10:21:43

标签: php jquery zend-framework

我正在使用以下代码,

<script type="text/javascript">
function fireDownload(){
    var path= '<?php echo URL; ?>/downloadmyfile';
    $.post(path,function(data){
   alert(data);
    });
}
</script>

我的控制器中有downloadfileAction

public function downloadmyfileAction()
    {
                $this->_helper->viewRenderer->setNoRender();
                $this->_helper->getHelper('layout')->disableLayout();
                  .....       .....         ....
        $this->view->List=$myData; 
                ///CREATE CSV
                $myFile = "ORDER_" . time() . ".csv";
                header("Content-Disposition: attachment; filename=\"$myFile\"");
                header("Content-Type: application/vnd.ms-excel; charset=UTF-16LE");
                $out = fopen("php://output", 'w');
                $csvData = array('SlNo', 'Test1','Test2','Test3','Test4','Test5');
                $o = fputcsv($out, $csvData, ',', '"');
                $count = 1;
                foreach($myData as $key => $value)
                {
                $csvData = array();
                $csvData = array($count,$value['Test1'],$value['Test2'],$value['Test3'],$value['Test4'],$value['Test5']);
                $o = fputcsv($out, $csvData, ',', '"');
                $count++;
                }

                fclose($fh);

                // DOWNLOAD CSV
                echo $out;
                die();

    }

当我启动函数downloadmyfile时,它会生成未知语言的警报,语言似乎是日本。我无法使用jquery post方法下载文件。请帮助我

2 个答案:

答案 0 :(得分:0)

你的下载应该是这样的:

    $this->_helper->layout->disableLayout();
    $this->_helper->viewRenderer->setNoRender();

    $this->getResponse()
        ->setHeader('Content-Type', $contentType)
        ->setHeader('Content-Disposition','attachment; filename="'.$filename . '";')
        ->setBody($data);

其中$ data是您文件的内容,在您的情况下是csv数据。 $ contentType将是一些内容类型,在您的情况下为“application / vnd.ms-excel; charset = UTF-16LE”。最后$ filename将是您开始下载时出现的文件名,在您的情况下将是:“ORDER _”。time()。“。csv”。不要使用die()而不要使用echo。当您呼叫控制器时,下载会自动开始。

希望有所帮助。 :)

答案 1 :(得分:0)

终于通过使用

找到了
function firedownload(){ 
    document.fname.action='<?php echo ADMIN_URL; ?>/downloadmyfile';
    document.fname.submit();
}

还更改了downloadmyfileAction()

中的行
// DOWNLOAD CSV
                echo $out;
                exit;   //die();

但我仍然无法在jquery post方法中找到解决方案,因为时间我转移到另一个解决方案