[HTML/JS] JavaScript data vanuit browser opslaan naar file

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Mini-me
  • Registratie: November 1999
  • Niet online
Voor een data-acquisitiesysteem gebruiken wij XML HTTP requests om data asynchroon van een server naar de client te verzenden en te visualiseren. Communicatie met de server loopt via een (in sommige situaties erg trage) GPRS of 3G verbinding en gezien de omvang van de hoeveelheid data die moet worden verzonden, is wenselijk dat dit zo efficiënt mogelijk gebeurt.
Naast het visualiseren van de data moeten we deze ook op de client kunnen opslaan in file, voor verdere analyse. In het verleden gebruikten we hiervoor de volgende IE-specifieke SaveAs dialoog:

JavaScript:
1
document.execCommand("SaveAs", true, <javascript variable>);


Vanaf IE8/9 is deze functionaliteit komen te vervallen en hebben we geen alternatief meer. Ook werkt deze functionaliteit niet in andere browsers.

Aangezien de analyse op de client buiten de browser plaatsvindt, kan de data niet in een cookie of local storage worden opgeslagen. Het aanbieden van een file download link vanaf de server is geen optie omdat de data dan opnieuw moet worden verzonden.

Kennen jullie andere methoden om het opslaan van een file toch mogelijk te maken?

Acties:
  • 0 Henk 'm!

  • RangedNeedles
  • Registratie: Juli 2009
  • Niet online
Heb zelf even gezocht, ik vond het wel interessant, en vond dit:
http://stackoverflow.com/...firefox/13696029#13696029
en ook dit:
http://stackoverflow.com/...-besides-changing-headers

Of dit echter in alle browsers werkt, geen idee, Chrome doet het in ieder geval wel :)
Een 'echte' oplossing bestaat erin om de headers aan te passen wanneer je het document van de server naar de client doorstuurt. In bijvoorbeeld PHP kan je zeggen dat hetgene dat doorgestuurd gaat worden een application/octet-stream is waardoor je browser zelf aanbiedt om de content op te slaan.

[ Voor 64% gewijzigd door RangedNeedles op 11-01-2013 10:55 ]


Acties:
  • 0 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 10-07 15:11
http://archive.plugins.jquery.com/project/table2csv denk dat je hier wel wat aan hebt

Acties:
  • 0 Henk 'm!

  • Mini-me
  • Registratie: November 1999
  • Niet online
PixelShooter schreef op vrijdag 11 januari 2013 @ 10:51:
Heb zelf even gezocht, ik vond het wel interessant, en vond dit:
http://stackoverflow.com/...firefox/13696029#13696029
en ook dit:
http://stackoverflow.com/...-besides-changing-headers
Of dit echter in alle browsers werkt, geen idee, Chrome doet het in ieder geval wel :)
Bedankt voor de tip, ik ga ze uitproberen. Dit lijkt, zoals vermeld, een WebKit-specifieke implementatie maar daarmee is een deel van alle browsers ondersteund.
Een 'echte' oplossing bestaat erin om de headers aan te passen wanneer je het document van de server naar de client doorstuurt. In bijvoorbeeld PHP kan je zeggen dat hetgene dat doorgestuurd gaat worden een application/octet-stream is waardoor je browser zelf aanbiedt om de content op te slaan.
Die oplossing geeft niet de mogelijkheid om de informatie in de browser weer te geven. In eerste instantie wordt van een meting een grafiek getekend en als de gebruiker daar interessante verschijnselen in ziet, dan wil hij de download starten.
Als ik het goed begrijp, is deze jQuery plugin gebaseerd op een repost van de pagina waarna een CSV geformatteerde string wordt opgeleverd. In dat geval wordt de server betrokken bij het download proces, waardoor ik de data alsnog twee keer moet downloaden.

Acties:
  • 0 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 10-07 15:11
Mini-me schreef op vrijdag 11 januari 2013 @ 15:35:

[...]

Als ik het goed begrijp, is deze jQuery plugin gebaseerd op een repost van de pagina waarna een CSV geformatteerde string wordt opgeleverd. In dat geval wordt de server betrokken bij het download proces, waardoor ik de data alsnog twee keer moet downloaden.
Ik heb het even voor je gecheckt maar hij doet geen request, wel een nette "save as" dialog. Weet ff niet meer uit mijn hoofd of het ook IE-bestendigd is maar ik geloof het wel.

[ Voor 8% gewijzigd door mcDavid op 12-01-2013 19:48 ]