2013-10-02 36 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);

相關問題