# Pdf in Ajax-request Response anzeigen/laden

**URL:** <https://forum.shopware.com/t/pdf-in-ajax-request-response-anzeigen-laden/48915>\
**Category:** Programmierung\
**Created:** [18. Oktober 2017 um 12:42 UTC](https://forum.shopware.com/t/pdf-in-ajax-request-response-anzeigen-laden/48915 "2017-10-18T12:42:29Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![mm\_swf](https://avatars.discourse-cdn.com/v4/letter/m/47e85d/32.png) [@mm\_swf](https://forum.shopware.com/u/mm_swf)\
**Post date:** [18. Oktober 2017 um 12:42 UTC](https://forum.shopware.com/t/pdf-in-ajax-request-response-anzeigen-laden/48915/1 "2017-10-18T12:42:29Z")

</div>

Hallo,

Nachdem der Client einen Ajax Request gesendet hat, erstelle ich eine Pdf mittels Mpdf, welches ich dann in der anwesenden (Enlight\_Controller\_Response\_ResponseHttp) response printe.

Es sieht so aus:

```
$mpdf = new Mpdf();
$response = $this->Response();
$response->setHeader('Content-disposition', 'attachment;' . 'filename="test.pdf"');
$response->setHeader('Content-Type', 'application/pdf');
            
$this->makePdf($mpdf);
echo($mpdf->Output());

```

Nun ist die pdf beim Client in der responseText im Ajax request da, etwa so: responseText: “%PDF-1.4↵%����↵3…” (langer String).

Meiner Recherchen nach sollten diese http Header dafür sorgen, dass&nbsp;im Browser automatisch der&nbsp;Download der pdf Datei “test.pdf” startet, samt Inhalt des responseText.

**Es passiert aber nichts.&nbsp;** An mpdf liegt as nicht, ich habe es schon eine Datei im Server schreiben lassen und die Pdf war korrekt.&nbsp;

Viele Grüße

---

<div class="post-metadata">

**Author:** ![arnebecker](https://avatars.discourse-cdn.com/v4/letter/a/3bc359/32.png) [@arnebecker](https://forum.shopware.com/u/arnebecker)\
**Post date:** [19. Oktober 2017 um 09:02 UTC](https://forum.shopware.com/t/pdf-in-ajax-request-response-anzeigen-laden/48915/2 "2017-10-19T09:02:22Z")

</div>

Die Header wirken beim Ajax Request nicht.&nbsp;Du brauchst aber auch keinen Ajax Request machen. Mach einfach nen ganz normalen Link oder setz window.location per JavaScript. &nbsp;Da der Browser angewiesen wird die Datei herunter zu laden, bleibt er auf der gleichen Seite und startet den Download.

---

<div class="post-metadata">

**Author:** ![mm\_swf](https://avatars.discourse-cdn.com/v4/letter/m/47e85d/32.png) [@mm\_swf](https://forum.shopware.com/u/mm_swf)\
**Post date:** [23. Oktober 2017 um 00:05 UTC](https://forum.shopware.com/t/pdf-in-ajax-request-response-anzeigen-laden/48915/3 "2017-10-23T00:05:07Z")

</div>

Danke für die Antwort. Ich bin eher neu in diesem Gebiet&nbsp;und&nbsp;mein Problem ist mit Ihrer Idee&nbsp;lösbar, aber trotzdem frage ich mich warum&nbsp;man&nbsp;es mit meinem Ansatz nicht machen kann, oder wie. So weit ich das verstehe führt ein Link zu einem GET request,&nbsp;und da GET in manchen Situationen begrenzt sein kann gegenüber POST sollte man vorbereitet sein, wenn eines Tages POST benötigt wird.&nbsp;

Eine andere Umgehung wäre nach dem POST eine Datei auf dem Server zu speichern, und diese dann mit GET runter zu laden. Ich vermute dass man Datenspeicherung nur zum Auslesen&nbsp;gleich danach&nbsp;zu vermeiden ist, wenn möglich.

Viele Grüße

---

<div class="post-metadata">

**Author:** ![arnebecker](https://avatars.discourse-cdn.com/v4/letter/a/3bc359/32.png) [@arnebecker](https://forum.shopware.com/u/arnebecker)\
**Post date:** [23. Oktober 2017 um 07:12 UTC](https://forum.shopware.com/t/pdf-in-ajax-request-response-anzeigen-laden/48915/4 "2017-10-23T07:12:22Z")

</div>

Du kannst auch ein POST per Formular machen. Das funktioniert auch. Nur wenn du es als xHR/Ajax Request machst, funktioniert es eben nicht. Warum weiß ich leider auch nicht. Aber der Browser handelt Ajax Requests eben anders.

Hier sind zwei Workarounds:

Formular per JS:&nbsp;[JavaScript post request like a form submit - Stack Overflow](https://stackoverflow.com/questions/133925/javascript-post-request-like-a-form-submit)

Hidden iFrame (wäre aber auch nur GET):&nbsp;[jquery - How to specify content-type and content-disposition with $.ajax() GET response - Stack Overflow](https://stackoverflow.com/questions/3106137/how-to-specify-content-type-and-content-disposition-with-ajax-get-response)

Und hier ist nochmal beschrieben, dass die Header nur bei einem „normalen“ HTTP Request ausgewertet werden. Ein AJAX Request ist in dem Sinne wohl nicht normal:&nbsp;[Content-Disposition - HTTP | MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition)

Das findet man übrigens alles wenn man nur mal 2 Minuten googelt 😉
