【问题标题】:Csv file not downloaded in Codeigniter using ajax未使用 ajax 在 Codeigniter 中下载 CSV 文件
【发布时间】:2020-07-21 13:01:02
【问题描述】:

我的实际问题是 ajax 成功后 CSV 文件没有下载 我的ajax方法是

$.ajax({
  type: "POST",
  url: "<?php echo site_url('reports/csvReports'); ?>",
  data: { data: dates, studentPerData: studentPerData },
  success: function (data) {},
});

控制器代码是

function csvReports() {
        //$studentPerData = $_POST['studentPerData'];
        $list = $_REQUEST['data'];
        $filename = 'studentreport.csv';
        header("Content-type: text/csv");
        header("Content-Disposition: attachment; filename=$filename");
        $output = fopen("php://output", "w");
        $header = array_keys($list[0]);
        fputcsv($output, $header);
        foreach ($list as $row) {
            fputcsv($output, $row);
        }
        fclose($output);
        return $output;
        }

【问题讨论】:

  • 设置标题以强制下载文件..不要返回输出。
  • 如何设置header来强制下载文件

标签: javascript ajax codeigniter export-to-csv


【解决方案1】:

试试你的ajax成功

           `$.ajax({
            url: URL",
            type: 'POST',
            data: formData,
            async: false,
            contentType: false,
            processData: false,
            success: function (data) 
            {
                
                var isHTML = RegExp.prototype.test.bind(/(<([^>]+)>)/i);                    
                if(!isHTML(data)){  
                var downloadLink = document.createElement("a");
                  var fileData = ['\ufeff'+data];
    
                  var blobObject = new Blob(fileData,{
                     type: "text/csv;charset=utf-8;"
                   });
    
                  var url = URL.createObjectURL(blobObject);
                  downloadLink.href = url;
                  downloadLink.download = "data.csv";
    
                  /*
                   * Actually download CSV
                   */
                  document.body.appendChild(downloadLink);
                  downloadLink.click();
                  document.body.removeChild(downloadLink);
                  
                  
                }                    
                
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) { 
                TRENDIN.ShowError("Status: " + textStatus); alert("Error: " + errorThrown); 
            }       
        });`

【讨论】:

    【解决方案2】:
    function csvReports() {
            //$studentPerData = $_POST['studentPerData'];
            $list = $_REQUEST['data']; // check ur $_REQUEST['data']
            $filename = 'studentreport.csv';
            header("Content-type: text/csv");
            header("Content-Disposition: attachment; filename=$filename");
            $output = fopen("php://output", "w");
            $header = array_keys($list[0]);
            // print_r($header); exit();   /* check variabe $header is array or not
            // $header = array('R1-col1','R1-col2');
            
            fputcsv($output, $header); // the second var header must be array.. 
            
            // check $list is Multidimensional array or not or not  
            
            /* $list = array (
                array("Peter", "Griffin" ),
                array("Glenn", "Quagmire")
               ); */
            // use commented $list array array to debug ur code
            foreach ($list as $row) {
                fputcsv($output, $row);
            }
              fclose($output);
              readfile($filename); // force file to download in browser
            }
    

    【讨论】:

      猜你喜欢
      • 2022-01-09
      • 2014-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多