我有一个小插件我正在写,它基本上从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也能正常下载并打开,但是没有数据..
任何帮助都会很棒!
答案 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);