While using a javascript based datagrid that was displaying json data provided to a page, I thought it smart to not have to re-download all the data again just to make export a csv file.
My solution was to use the “Papa Parse” library to create the CSV file and use URL.createObjectURL() to actually make local data appear as a file which can be downloaded.
I also tried directly setting base64 encoded data to the window like this solution but it choked on my 6-10MB report results.
jQuery(document).ready(function() {
//My json formatted data from php.
var dataSet = <?=json_encode($data)?>;
//select our link, create an objectURL Blob of CSV data.
jQuery('#downloadCsv').attr('href',URL.createObjectURL(new Blob([Papa.unparse(dataSet)], { type:"text/csv" } ) ) );
});
and the html for the link:
<a id="downloadCsv" class="button button-secondary" download="reportdata.csv">Download CSV</a>

