如何使用自己的数据正确下载CSV?

时间:2013-10-02 02:44:19

标签: jquery string csv download

我有一个小插件我正在写,它基本上从facebook API中提取信息,循环,从我想要的数据创建一个格式化的字符串,并强制下载一旦它运行,但是,据我所知,我正确地格式化了字符串,但我无法打开csv(除非我是愚蠢的,很可能就是这种情况......)。

DEMO: http://jsfiddle.net/shannonhochkins/vUnF9/848/

然而,这是一个非常简单的例子,我如何格式化我的回复我正在格式化我的回复:

var string = "a","b","c","d","e","f","etc";

据我所知,这就是csv文件所期望的,但是当我将这些信息强制放在靠近小提琴顶部的window.open命令而不是传递给我自定义字符串时,它甚至都不起作用。

我知道这是一大堆代码,但我不确定我还能在这做什么呢?

即使我直接运行:window.open("data:text/csv;charset=utf-8," + escape("a","b","c","d","e","f","etc")),csv也能正常下载并打开,但是没有数据..

任何帮助都会很棒!

2 个答案:

答案 0 :(得分:3)

你有几个问题:

1)你太早下载了。 FB api调用是ajax(aynch)调用,因此只有在成功后才需要下载

2)您检查response.length,响应是一个对象,它没有长度属性。

3)使用window.open下载csv,您可以尝试使用HTML5 anchor download属性。

你可以在这些方面做点什么:

for (var i = 0; i < ids.length; i++) {
    FB.api(ids[i], 'get', function (response) {
        if (response) {
            //csvString = toCsv(response);   
            csvString += (hasRun == false ? getArrayValue(response, true) : getArrayValue(response, false));
            console.log(csvString);
            hasRun == true;

        }

        $('#keys').html(csvString);
           var tmpAnc=document.createElement('a');
           tmpAnc.textContent='download';
           tmpAnc.download="myFileName.csv";
           tmpAnc.href='data:text/csv;charset=utf-8,'+escape(csvString);
           tmpAnc.click();

    });
    //updateprogressBar(i + 1, ids.length);
}

<强> Fiddle

此外,您似乎在每行之后缺少换行符,所有内容都以单行显示

这是另一个例子:

$("#download").click(function() {
    var tempAnc    = document.createElement('a');
    tempAnc.href    = 'data:attachment/csv,' + escape($("#csv").val());
    tempAnc.target   = '_blank';
    tempAnc.download   = 'myFile.csv';
    tempAnc.click();
});

<强> Fiddle

<强> Fiddle- Combined request

答案 1 :(得分:1)

如果您使用口音,请考虑前置\ ufeff

我使用上面的文字进行了小的修改。这是因为如果没有这个,你就可以在没有BOM的情况下使用UTF-8,添加它将适用于pt-br和其他使用重音的语言。

tmpAnc.href = '数据:文本/ CSV;字符集= UTF-8,\ ufeff' +逸出(csvString);