1

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

演示: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 也会正确下载并打开,但没有数据..

任何帮助都会很棒!

4

2 回答 2

3

你有几个问题:

1)你下载得太早了。FB api 调用是 ajax (aynch) 调用所以你需要在它成功后才下载

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

3) 使用 window.open 下载 csv,你可以尝试使用 HTML5 锚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);
}

小提琴

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

这是另一个例子:

$("#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-组合请求

于 2013-10-02T03:00:45.517 回答
1

如果您使用重音符号,请考虑在前面加上 \ufeff

我使用上面的文字进行了一些小改动。这是因为如果没有这个,您在没有 BOM 的情况下执行了 UTF-8,添加后它将适用于 pt-br 和其他使用重音符号的语言。

tmpAnc.href='data:text/csv;charset=utf-8,\ufeff'+escape(csvString);

于 2014-11-07T16:41:45.960 回答