PageController XMLHttpRequest

Hallo,

ich möchte eine komplette Artikelseite per Ajax-Call laden. Also das ganze Dokument, nicht nur den body

this.url = 'https://example.com/myproduct'
this.options = {
    method: 'GET',
    headers: { 'X-Requested-With': 'XMLHttpRequest' }
}
fetch(this.url, this.options)
    .then(res => res.text())
    .then(response => {
        ...

Bekomme aber immer den Error

PageController can’t be requested via XmlHttpRequest.

Wenn ich den Header weglasse funktionierts aber das ist ja auch nicht Sinn der Sache.
Ich würde ganz gerne Turbolinks implementieren, was ja so gar nicht funktionieren würde…

Hallo

Ich habe kurz nachgeforscht und eine simple Antwort gefunden nur ob das so aufhebt kann ich dir nicht sagen.

Am besten du erstellst ein neues Theme und darin musst du den Controller welchen du ansprechen willst anpassen (überschreiben).

Du musst defaults={"XmlHttpRequest"=true} hinzufügen.

vendor/shopware/storefront/Controller/ProductController.php:86

@Route("/detail/{productId}", name="frontend.detail.page", methods={"GET"}, defaults={"XmlHttpRequest"=true})

Das musst du dann für alle Controller einmal durchgehen und anpassen wo es nicht gesetzt ist.

Referenz: Stackoverflow

Ja, den Thread mit den Annotations habe ich auch gefunden. Das habe ich jetzt mal ausprobiert und den die index-Action im ProductController mit der Annotation defaults={"XmlHttpRequest"=true} versehen.

Funktionier aber auch nicht, jetzt kommt der Fehler:

Call to a member function setMetaDescription() on null

Ich vermute, wenn der Request mit XmlHttpRequest im Header kommt, werden diverse Funktionen nicht geladen (Header, Footer, Metadaten…), weshalb man dann immer wieder auf andere Errors läuft.

Also, entweder ohne XmlHttpRequest im Header oder gar nicht :frowning: