2010-09-06 43 views
0

UPDATE:输出CSV通过jQuery的下载

通过解决:

  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 ping的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+''}); 
     } 

想法?

+1

根本不需要做任何ajax调用。只需将'location.href'设置为url即可。 – Pointy 2010-09-06 12:29:10

+0

答:因为它弄乱了人们通常阅读文本的顺序。 问:为什么顶级发布这样一件坏事? - 另外,如果你已经解决了这个问题,请用你的解决方案回答你自己的问题。 – 2010-11-15 12:03:06

回答

1

我不认为这是可能的,因为所有的标题已经发送。正如Pointy所说,将它分成两部分,一部分回答ping传递文件的那个部分。