【问题标题】:Output CSV to download via jquery输出 CSV 以通过 jquery 下载
【发布时间】:2010-09-06 11:05:52
【问题描述】:

更新:

通过以下方式解决:

            append = append+'/output/'+output;
            var url = '/producer/json/index/period/'+period+'/empties/'+empties+'/movies/'+movies+'/fields/'+fields+'/start/'+start+'/end/'+end+append+'';
            $.ajax({ 
                url: ''+url+'',  
                success: function(msg) {
                    location.href = ''+url+'';
                }
            });

你好,

我有一段 Javascript 可以 ping 一个 URL 并更新一个表格。我现在想输出一个 CSV 文件。

所以我的 PHP 端完成了,如果我查看 ajax pings 的 URL,文件被创建并正确输出。

但是,如何让 jQuery/Javascript 将其检索到的内容输出为下载内容?

PHP:

public function outputCSV($main, $fields) {

    header('Cache-Control: no-cache, must-revalidate');
    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
    header('Content-type: application/excel');
    header('Content-Disposition: attachment; filename="ProducerAreaOutput-'.date('r').'.csv"');

    $array      = array();//make a new array, put the fields first
    $array[0]   = $fields;

    foreach ($main as $item) {//loop existing rows
        $array[] = $item;
    }

    $csv = self::array_to_csv($array, false);

    echo $csv;
    exit;
}

Javascript

    function byMonth(output) {

        var undefined;
        oTable = $('#stats').dataTable();
        oTable.fnClearTable();

        var start       = $('#year-start').val()+'-'+$('#month-start').val()+'-1';
        var end         = $('#year-end').val()+'-'+$('#month-end').val()+'-30';
        var empties     = $('#empties').val();
        var period      = $('#period').val();
        var movies      = $('#movies').val();
        var site_id     = $('#site_id').val();
        var studio_id   = $('#studio_id').val();
        var movie_id    = $('#movie_id').val();
        var append      = '';


        append = (site_id > 0)      ? append+'/site_id/'+site_id        : append;
        append = (studio_id > 0)    ? append+'/studio_id/'+studio_id    : append;
        append = (movie_id > 0)     ? append+'/movie_id/'+movie_id      : append;


        if (output === 'CSV') {
            append = append+'/output/'+output;
            $.ajax({ url: '/producer/json/index/period/'+period+'/empties/'+empties+'/movies/'+movies+'/fields/'+fields+'/start/'+start+'/end/'+end+append+''});
        } 

想法?

【问题讨论】:

  • 根本不需要进行 ajax 调用。只需将location.href 设置为网址即可。
  • 答:因为它打乱了人们通常阅读文本的顺序。问:为什么置顶是一件坏事? — 另外,如果您已经解决了这个问题,请用您的解决方案回答您自己的问题。

标签: javascript jquery csv


【解决方案1】:

我认为这是不可能的,因为所有标头都已发送。按照 Pointy 说的做,把它分成两部分,一是响应 ping,一是传递文件。

【讨论】:

    猜你喜欢
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    相关资源
    最近更新 更多