# jQuery |Per Ajax-Request eine Datei als Download anbieten?



## N0ACE (4. August 2009)

Halli-hallo zusammen,


Um ein ganzes Set an Daten darzustellen, benutze ich eine HTML-Tabelle, in welcher 30 Datensätze aus eine DB angezeigt werden. Über den einzelnen Tabellenköpfen habe ich - je Spalte - ein Input-Feld gesetzt, sodass man sich die Ansicht anpassen und filtern kann.

Um dies zu realisieren, nutze ich jQuerys $.ajax(), das klappt soweit auch wunderbar nach dem Schema "Nach Klick auf X -> nimm die Inputs und sende den Inhalt ($.serialize()) via POST an Script Y, welches ein JSON Objekt zurück schickt, welches dann in die Tabelle auf der Seite eingebunden wird". Wie gesagt: Alles roger, klappt genau so, wie es soll 

Jetzt möchte ich aber einen zweiten Knopf anbieten, welcher das aktuelle Ergebnis als Excel-Datei sendet. 

Prinzipiell sollte es GENAU so gehen, wie mit der Anfrage des JSON Objektes, nur dass eben eine Excel-Datei gesendet wird...

Um dies umzusetzen, nutze ich die PEAR-Klasse "Spreadsheet Writer" und möchte damit auch die Daten mittels der send()-Methode als Download senden, *das Problem ist aber*, dass ich quasi nur den Quellcode der generierten .xls-Datei bekommen (habe dies mittels FireBug überprüft).

Ich denke, dass es daran liegt, dass jQuerys $.ajax() Methode irgendwelche header setzt oder braucht und das Ergebnis nicht korrekt verarbeiten kann.

Hat von euch jemand eine Idee, wie ich es schaffe, jQuery dazu zu überreden, mir die gesendete Excel-Datei als Download und nicht als Sourcecode zu senden?



Für Eure Bemühungen bedanke ich mich im voraus 



Greets!


----------



## Sven Mintel (5. August 2009)

Moin,

also du hast da dies Skript, welches Anhand irgendwelcher Daten eine Excel-Datei generiert? Ich gehe mal davon aus, der passende Content-Type-Header wird auch gesendet?

Dann wäre die Lösung recht simpel...anstatt da per AJAX anzufragen, lasse dieses Skript direkt aufrufen(ob nun per Link, senden eines Formulares oder ähnlichem ist dir überlassen).

Ajax ist da halt das falsche Werkzeug, weil es die Antwort des Servers lediglich als String bzw. XML-Dokument ansieht.


----------



## N0ACE (5. August 2009)

Sven,

Danke für die Antwort! Das "Problem" welches ich dann aber habe ist, dass ich die "Filter-Daten" irgendwie an das Script senden muss; via POST.

Deswegen nutze ich auch die $.ajax()-Methode, da ich so einfach mittels der data-Eigenschaft Daten via POST senden kann.

```
$.ajax({
   url: 'create_excel.php',
   type: 'post',
   data: $('form#data).serialize(),
   ......
});
```

Es sind viele Daten, welche übermittelt werden (wie oben erwähnt: Jede Spalte der Tabelle ist durchsuchbar/filterbar, so hat man, wenn man n Spalten hat, schon mal n WHEREs im SQL. Dann kommen noch LIMIT, ORDER BY und ASC/DESC hinzu). All diese Daten muss ich an das Script weitergeben; vorzugsweise via POST.

Oder gibt es eine andere Möglichkeit, dies umzusetzen?


Für Eure Hilfe bedanke ich mich im voraus sehr


----------



## Sven Mintel (5. August 2009)

Naja, das ist ja kein echtes Problem 

Der eigentlich für soetwas vorgesehene Weg ist ja ein normales Formular, das würde alle deine Anforderungen erfüllen.


----------



## N0ACE (7. August 2009)

Richtig, so gesehen wäre das kein Problem! Ein simples Formular basteln, welches die Daten dann versendet, sobald es abgeschickt wird...

Meine Frage zielt eher darauf ab, ob man diese Daten auch anders via POST versenden kann (z.B. mittels jQuery); also _ohne_ dafür noch ein zusätzliches Formular drumherum basteln. jQuery bietet zwar die $.post() Methode, aber damit hätte ich ja wieder genau das gleiche Problem, wie mit $.ajax() ...

Oder ist es die einzige Möglichkeit, ein Formular zu basteln, welches ich dann "submit"-te, um Daten via Post zu senden?


Für Eure Hilfe bedanke ich mich erneut und verbleibe

mit freundlichen Grüßen!


----------



## MsvP@habdichliebhasi (7. August 2009)

Du kannst das versenden der Daten doch auch ohne Formular bewerkstelligen.

Letztendlich musst du nur einen Aufruf haben, der den Poast Befehl anstößt.
Du könntest z.b. auch eine einfache onClick Frage einbauen, die dann deine Funktion zur Daten-Abrufung schickt.

Lg
Micha


----------



## Sven Mintel (7. August 2009)

N0ACE hat gesagt.:


> Oder ist es die einzige Möglichkeit, ein Formular zu basteln, welches ich dann "submit"-te, um Daten via Post zu senden?



Ich sehe da keinen anderen Weg, wenn es darum geht, den Download angeboten zu bekommen, lasse mich aber gern eines Besseren belehren.


----------

