2010-10-26 82 views
5

我在客戶端有一堆數據,在JS中。我希望允許用戶以文本(CSV實際)格式將該數據保存到本地硬盤驅動器。從JS下載客戶端數據(沒有新的服務器往返)

我可以使用ajax將所有這些數據發佈到服務器,然後從客戶端啓動GET以下載數據,從而輕鬆完成此任務。但這似乎很浪費。特別是如果數據很大。

客戶端已經擁有數據 - 我當然可以向他們展示數據,並允許他們將其複製/粘貼到他們最喜歡的文本編輯器中 - 但這不是一個很好的UI。

我想讓他們將數據保存到本地文件。我理解這裏的安全含義。

我相信這是可能的使用dataurl,但(謝謝MS),這必須工作在IE7和8 ..所以這是出。

任何開箱即用的想法?

+0

這是一個相關的問題(http://stackoverflow.com/questions/921037/jquery-table-to-csv-export)。他們正在做一個服務器往返,我意識到這並不理想,但肯定會有效。 – dana 2010-10-26 22:56:46

回答

1

不會爲這個特定的設置工作,但它是沿着這些線路的東西..

http://decafbad.com/2009/07/drag-and-drop/api-demos.html#data_transfer

<!DOCTYPE HTML> 
<html lang="en"> 
<head> 
    <title>Drag and Drop --> Text File</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
    <meta http-equiv="Content-Language" content="en-us" /> 
    <script type="text/javascript" src="jquery.js"></script> 

    <script type="text/javascript"> 
     $(document).ready(function() { 
      // Set up the draggable element. 
      $('#data_transfer').bind('dragstart', function(ev) { 
       if (!$(ev.target).hasClass('dragme')) return true; 
       var dt = ev.originalEvent.dataTransfer; 
       dt.setData('text/plain', $('#source').text()); 
       return true; 
      }); 
     }); 
    </script> 

    <style type="text/css"> 
     .dragme { 
      border: 1px solid #000; 
      background-color: #decafb; 
      padding: 10px; 
     } 
    </style> 
</head> 

<body> 
    <div id="data_transfer"> 
     <textarea id="source">Blah! I'm a textarea!</textarea> 
     <p><span class="dragme" draggable="true">Drag Me to your Desktop!</span></p> 
    </div> 
</body> 
</html> 
+0

這很有趣,雖然有幾個問題:1)它在IE中不起作用。 2)它不允許我設置輸出文件名 - 在Mac上,它只是將其稱爲「textClipping」文件。 3)我也需要這個不在拖/放的事件,這將需要一個文件保存對話框來選擇保存位置。 – desau 2010-10-26 22:21:41

3

Downloadify做到這一點。它需要Flash。

Downloadify是一個小小的JavaScript + Flash庫,可以在瀏覽器中實時生成和保存文件,而無需與服務器交互。

+0

這對於任何數量的擴展來說當然是可能的。Flash,Active-X,Silverlight,Java Applet等等,等等,我需要這個不需要任何額外的插件。 – desau 2010-10-26 22:11:04

+0

@desau我不認爲這可以做到沒有額外的插件,否則Downloadify將不需要存在.... – 2010-10-27 09:00:48

相關問題