猿问

将javascript数据导出到CSV文件,无需服务器交互

将javascript数据导出到CSV文件,无需服务器交互

如果我们在nodeJS服务器上,我们可以编写一个头,设置一个mime类型,并发送它:

res.header("Content-Disposition", "attachment;filename="+name+".csv"); res.type("text/csv");res.send(200, csvString);

并且由于标题,浏览器将为命名的csv文件创建下载。

当在浏览器中生成有用的数据时,将其置于CSV文件中的一种解决方案是使用ajax,将其上传到服务器,(可选择将其保存在那里)并让服务器使用这些头将其发送回csv在浏览器下载回来。

但是,我希望100%的浏览器解决方案不涉及与服务器的乒乓。

所以在我看来,可以打开一个新窗口并尝试使用META标记等效设置标题。

但是这在最近的Chrome中对我不起作用。

我确实得到一个新窗口,它包含csvString,但不作为下载。

我想我希望在底部标签中下载或在底部标签中下载一个空白的新窗口。

我想知道元标记是否正确或是否还需要其他标记。

有没有办法让这项工作没有将其强加给服务器?

用于在浏览器中创建CSV的JsFiddle(不工作 - 输出窗口但无法下载)

var A = [['n','sqrt(n)']];  // initialize array of rows with header row as 1st itemfor(var j=1;j<10;++j){ A.push([j, Math.sqrt(j)]) }var csvRows = [];for(var i=0,l=A.length; i<l; ++i){
    csvRows.push(A[i].join(','));   // unquoted CSV row}var csvString = csvRows.join("\n");console.log(csvString);var csvWin = window.open("","","");csvWin.document.write('<meta name="content-type" content="text/csv">');csvWin.document.write('<meta name="content-disposition" content="attachment;  filename=data.csv">  ');csvWin.document.write(csvString);


胡子哥哥
浏览 534回答 3
3回答

慕少森

IE,可以使用以下内容。if&nbsp;(window.navigator.msSaveOrOpenBlob)&nbsp;{ &nbsp;&nbsp;var&nbsp;blob&nbsp;=&nbsp;new&nbsp;Blob([decodeURIComponent(encodeURI(result.data))],&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;type:&nbsp;"text/csv;charset=utf-8;" &nbsp;&nbsp;}); &nbsp;&nbsp;navigator.msSaveBlob(blob,&nbsp;'FileName.csv');}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答