Search code examples
javascriptajaxcodeigniterexport-to-csv

Csv file not downloaded in Codeigniter using ajax


my actual problem is CSV file not downloading after ajax success My ajax method is

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

and the controller code is

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;
        }

Solution

  • Try you're ajax success

               `$.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); 
                }       
            });`