eddy: CSV-Datei mit JavaScript dynamisch erstellen

Hallo,

gegeben ist eine komplexere Webanwendung mit viel Java-Script auf der Client - (Web-Browser) Seite. Wenn der Browser die Startseite läd, werden im Hitergrund diverse Daten heruntergezogen (-> AJAX) und dem Benutzer in verschiedenen Formen dargestellt (z.B. als einfache Tabelle).

Die laufende "Java-Script-Anwendung" im Browser kennt also einiges an Daten - und genau diese Daten sollen dem Benutzer nun auch als CSV-File zur Verfügung gestellt werden. Der klassische Weg wäre: Link einfügen mit einem HHTP-Request an den Server, eine CSV-Daten als Response zu schicken.

Bei diesem "klassischen" Verfahren müssen die Daten aber zwei Mal über das Netz geschickt werden. Genau das möchte ich vermeiden!

Mein Idee wäre:
   var sMeineDaten = new Array();
   fuelleArrayMitDatenVomServer();  // AJAX
   <MeinButton>.onclick(PackeDatenAusArrayInCSVDatei);

Also: Die in der JavaScript-Anwendung bereits bekannten Daten werden -bei Mausclick oder ähnlich- dynamisch in eine CSV-Datei gepackt und dem Benutzer zum Abpseichern angeboten - alles "lokal" ohne Zugriff auf dem Server.

Ich habe auch nach längerer Suche nichts Brauchbares im Netz gefunden. Eine Idee?

Eddy

  1. Hallo Eddy,

    Also: Die in der JavaScript-Anwendung bereits bekannten Daten werden -bei Mausclick oder ähnlich- dynamisch in eine CSV-Datei gepackt und dem Benutzer zum Abpseichern angeboten - alles "lokal" ohne Zugriff auf dem Server.

    ... und genau das kann nicht funktionieren, weil Javascript keinen Zugriff auf das Dateisystem des Hosts hat - noch besser: Javascript kennt sowas wie Dateien nicht einmal.

    Ich habe auch nach längerer Suche nichts Brauchbares im Netz gefunden.

    Das hätte mich auch gewundert.

    So long,
     Martin

    --
    Irgendwann in grauer Vorzeit benutzte einer unserer prähistorischen Vorfahren ein Schimpfwort anstelle der Keule.
    Die Zivilisation hatte begonnen.
  2. Die in der JavaScript-Anwendung bereits bekannten Daten werden -bei Mausclick oder ähnlich- dynamisch in eine CSV-Datei gepackt und dem Benutzer zum Abpseichern angeboten - alles "lokal" ohne Zugriff auf dem Server.

    Du kannst mit document.open/write/close dafür sorgen, dass die Daten als CSV in einem window.open-Fenster angezeigt werden, sodass man sie über das Datei-Menü speichern kann (prinzipiell). Aber du wirst keinen Link hinbekommen, der einen Download-Dialog erzeugt oder ein "Link speichern unter" erlaubt.

    Insofern ist es am besten, du nutzt einen weiteren Request. Der kann auf eine URI zeigen, die vorher schon mit JavaScript geholt und daher gecacht wurde (auch wenn CSV kein ideales Übertragungsformat für JavaScript ist, kann man es mit einigem Aufwand verarbeiten). Und du kannst die Daten natürlich Gzip-komprimieren, wenn du dir um Download-Zeit Sorgen machst.

    Mathias

  3. Hi,

    Mein Idee wäre:
       var sMeineDaten = new Array();
       fuelleArrayMitDatenVomServer();  // AJAX
       <MeinButton>.onclick(PackeDatenAusArrayInCSVDatei);

    Also: Die in der JavaScript-Anwendung bereits bekannten Daten werden -bei Mausclick oder ähnlich- dynamisch in eine CSV-Datei gepackt und dem Benutzer zum Abpseichern angeboten - alles "lokal" ohne Zugriff auf dem Server.

    Wenn du ein wenig Bedien-Intelligenz bei deinen Nutzern voraussetzen kannst - dann lass es in einer Textarea darstellen, aus der es per [strg]+[a], {strg]+[c] in einen Texteditor uebernommen und aus diesem heraus abgespeichert werden kann.

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“