2013-10-02 35 views
1

我写了一个小插件,它基本上从Facebook API中提取信息,循环,根据我想要的数据创建格式化的字符串,然后在运行时强制下载,但就我所知,我正确地格式化字符串,但我无法打开csv(除非我很愚蠢,最有可能的情况是......)。如何正确使用我自己的数据下载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下载正确和打开,但没有数据..

任何帮助将是巨大的!

回答

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); 
} 

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

+0

啊,当然,非常感谢,新的行应该很容易:)再次谢谢你! –

+0

你介意我问一下'window.open'命令和你创建锚点的方式有什么不同? –

+0

@ShannonHochkins这是第一次,即使我从客户端做了真正的文件下载。不知何故,window.open不起作用。所以尝试使用这个选项创建一个临时锚定标记,但它的工作仍然只是在不同的浏览器中检查一次。 – PSL

1

如果您使用的口音,请考虑在前面加上\ ufeff

我用上面的文字小的变化。这是因为如果没有这个功能,你没有使用BOM的UTF-8,而你添加这个功能可以用于pt-br和其他使用重音的语言。

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

相关问题