2013-10-02 2 views
1

У меня есть небольшой плагин, который я пишу, который в основном извлекает информацию из API facebook, перебирает петли, создает форматированную строку из данных, которые мне нужны, и силы загрузки после ее запуска, насколько мне известно, Я правильно форматирую строку, но я не могу открыть 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 call является 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

Ах, конечно, спасибо, так много новых линий должно быть довольно легко :) thankyou снова! –

+0

Не возражаете ли вы, чтобы я спросил, какая разница между командой 'window.open' и тем, как вы создаете якорь? –

+0

@ShannonHochkins Это первый раз, когда я даже сделал реальную загрузку файла с клиентской стороны. Как-то window.open не работает. Так что попробовал эту опцию, создав тег привязки temp, но он все равно просто проверял разные браузеры один раз. – PSL

1

Если вы используете акценты пожалуйста, рассмотрите перед именем \ ufeff

Я использую выше текст с небольшими изменениями. Это потому, что без этого вы делали UTF-8 без спецификации, добавив, что это будет работать для pt-br и других языков, использующих акценты.

tmpAnc.'Данные: текст/CSV; Charset = UTF-8, \ ufeff' HREF = + бегству (csvString);

Смежные вопросы