# POST Request zu Controller über AJAX

**URL:** <https://forum.shopware.com/t/post-request-zu-controller-ueber-ajax/72872>\
**Category:** Programmierung\
**Created:** [18. Februar 2021 um 07:58 UTC](https://forum.shopware.com/t/post-request-zu-controller-ueber-ajax/72872 "2021-02-18T07:58:16Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Mischa88](https://avatars.discourse-cdn.com/v4/letter/m/ba9def/32.png) [@Mischa88](https://forum.shopware.com/u/Mischa88)\
**Post date:** [18. Februar 2021 um 07:58 UTC](https://forum.shopware.com/t/post-request-zu-controller-ueber-ajax/72872/1 "2021-02-18T07:58:16Z")

</div>

Hi.

Ich versuche gerade einen eigenen Controller zu schreiben. Ich möchte das der Controller über einen AJAX call mit einem POST aufgerufen wird und komme nicht weiter.

Ich habe eine Methode mit @RouteScopes(storefront) und @Route(_"/xyz/test", name=“xyz.test”, methods={“POST”}_) registriert.

Wenn ich in der Browser-Console manuell einen Request absende erhalte ich eine 403, der CSRF TOKEN wäre nicht valide.

Wie kann ich die Route korrekt aufrufen? Kann ich den CSRF Token manuell dranhängen? Oder sollte ich einen anderen Scope verwenden?

---

<div class="post-metadata">

**Author:** ![Mischa88](https://avatars.discourse-cdn.com/v4/letter/m/ba9def/32.png) [@Mischa88](https://forum.shopware.com/u/Mischa88)\
**Post date:** [25. Februar 2021 um 09:05 UTC](https://forum.shopware.com/t/post-request-zu-controller-ueber-ajax/72872/2 "2021-02-25T09:05:50Z")

</div>

Ich bin mal tiefer in den Shopware Code eingestiegen (warum gibt es denn keine Doku für sowas? muss man sich immer alles aus den Fingern saugen?) und habe die `sw_csrf` Twig Funktion gefunden.  
&nbsp;

In einem .html.twig Template:

In unserem Javascript plugin:

```
import HttpClient from 'src/service/http-client.service';

...

client.post(                                                                                                                              
           '/xyz/test',                                                                                                                      
           JSON.stringify({ _csrf_token: this.el.getAttribute('data-xyz-token'), data: 'test'})                           
       );

```

Ich weiss nicht ob es wirklich so gedacht ist. Muss ich wirklich manuell den `_csrf_token` in den Request-Daten setzen? Gibt es da nichts Fertiges für sowas?

---

<div class="post-metadata">

**Author:** ![sschreier](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sschreier/32/23296_2.png) [@sschreier](https://forum.shopware.com/u/sschreier)\
**Post date:** [25. Februar 2021 um 09:19 UTC](https://forum.shopware.com/t/post-request-zu-controller-ueber-ajax/72872/3 "2021-02-25T09:19:05Z")

</div>

Hallo,

ja man gibt den CSRF-Token dem abzusehenden Formular mit, siehe Shopware Dokumentation:&nbsp;[Shopware 6: Writing data](https://docs.shopware.com/en/shopware-platform-dev-en/references-internals/storefront/storefront-writing-data#append-csrf-token-to-forms) . Beim JavaScript - POST - Request muss der Token dann aber nicht manuell mitgesendet werden, insofern man es sauber über ein Formular macht und beispielsweise&nbsp;FormSerializeUtil.serialize nutzt.

Grüße

Sebastian

---

<div class="post-metadata">

**Author:** ![Mischa88](https://avatars.discourse-cdn.com/v4/letter/m/ba9def/32.png) [@Mischa88](https://forum.shopware.com/u/Mischa88)\
**Post date:** [25. Februar 2021 um 09:56 UTC](https://forum.shopware.com/t/post-request-zu-controller-ueber-ajax/72872/4 "2021-02-25T09:56:34Z")

</div>

Ich habe aber gar kein Formular.

Bzw. was heißt „sauber über ein Formular“, das sieht eher wie ein Workaround aus.

---

<div class="post-metadata">

**Author:** ![sschreier](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sschreier/32/23296_2.png) [@sschreier](https://forum.shopware.com/u/sschreier)\
**Post date:** [25. Februar 2021 um 10:49 UTC](https://forum.shopware.com/t/post-request-zu-controller-ueber-ajax/72872/5 "2021-02-25T10:49:15Z")

</div>

Hallo,

anhand deines POST - Requests bin ich davon ausgegangen, das du auch Daten verarbeiten möchtest. Und so etwas sollte man am besten über ein Formular - Element ( \< form \> )&nbsp;tun, so wie es auch in der verlinkten Dokumentation steht. Und&nbsp;FormSerializeUtil.serialize wird dabei immer genutzt, wenn es um solche Dinge geht, siehe: [platform/form-auto-submit.plugin.js at trunk · shopware/platform · GitHub](https://github.com/shopware/platform/blob/trunk/src/Storefront/Resources/app/storefront/src/plugin/forms/form-auto-submit.plugin.js#L111) . Ein “Workaround” ist dies also nicht.

Grüße

Sebastian

&nbsp;

---

<div class="post-metadata">

**Author:** ![smart-store-post](https://avatars.discourse-cdn.com/v4/letter/s/e9c0ed/32.png) [@smart-store-post](https://forum.shopware.com/u/smart-store-post)\
**Post date:** [7. Juni 2023 um 15:37 UTC](https://forum.shopware.com/t/post-request-zu-controller-ueber-ajax/72872/6 "2023-06-07T15:37:50Z")

</div>

CSRF Check kann auf Server-Seite ausgeschaltet werden, siehe:

> **[Use CSRF protection](https://developer.shopware.com/docs/guides/plugins/plugins/storefront/use-csrf-protection#exclude-controller-action-from-csrf-checks)**

Bsp:

```auto

/**
 * @Route("/some-ajax-action", methods={"POST"}, defaults={"csrf_protected"=false, "XmlHttpRequest"=true})
 */

```
