Update auf 5.7.2 Fehler bei Filterund Uncaught SyntaxError: JSON.parse

Hallo,
nach dem Update auf 5.7.2 haben wir Probleme mit dem Filter.

Es erschinen Fehler wie
„Uncaught SyntaxError: JSON.parse: expected ‚,‘ or ‚}‘ after property value in object at line 1 column 83938 of the JSON data“ oder
„Uncaught SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data at line 1 column 2035 of the JSON data“

Wo kann der Fehler leigen?

Danke
Stephan

Das Problem haben wir nach dem Update von 5.6 auf 5.7 auch. Ursache bei uns sind html-Tags in einem Freitextfeld der Hersteller. Könnte aber vermutlich auch jedes andere Feld betreffen.

Das JavascriptPlugin swListingActions führt folgende Codezeile durch (Methode sendListingRequest, ca. Zeile 1009, Stelle im git)

facets = $textResponse.find('#facets').html(),

und versucht das dann als JSON zu parsen. Das funktionert nicht.
An der Stelle

facets = $textResponse.find('#facets').text(),

nutzen würde das Problem wohl lösen, da kommt man aber nicht einfach so mal ran.

Manchmal sieht man den Wald vor Bäumen nicht. Plugins lassen sich doch recht einfach im Verhalten ändern.
z.B. über eine eigene JS-Datei im Theme. Inhalt wie folgt hat das Problem bei uns erstmal beseitigt, hilft bei euch vielleicht auch

$.overridePlugin('swListingActions',{
    sendListingRequest: function (params, loadFacets, loadProducts, callback, appendDefaults) {
        var me = this;
        if (typeof params === 'object') {
            params = '?' + $.param(params);
        }

        this.resetBuffer();

        $.ajax({
            type: 'get',
            url: this.buildListingUrl(params, loadFacets, loadProducts),
            success: function (textResponse, status, ajaxResponse) {
                var $textResponse = $($.parseHTML(textResponse, document, true)),
                    facets = $textResponse.find('#facets').text(),
                    listing = $textResponse.find('#listing').html(),
                    pagination = $textResponse.find('#pagination').html(),
                    response = {
                        totalCount: parseInt(ajaxResponse.getResponseHeader('Shopware-Listing-Total'))
                    };

                if (facets) {
                    response.facets = JSON.parse(facets);
                }

                if (listing) {
                    response.listing = listing;
                }

                if (pagination) {
                    response.pagination = pagination;
                }

                callback.apply(me, [response, status, ajaxResponse]);
            }
        });
        $.publish('plugin/swListingActions/onGetFilterResult', [this, params]);
    }
});

Hi.
Bei uns ist auch HTML in Freitextfeldern der Hersteller der Verursacher des Fehlers.
Deine Lösung funktioniert insoweit, dass der Fehler nicht mehr auftritt. Allerdings funktioniert dann die Facettierung nicht mehr.

Habt Ihr dafür ne Lösung gefunden?

Stephan

Hallo zusammen,

könntet ihr mal schauen, ob dieser Pull Request auf GitHub euer Problem löst?

Viele Grüße aus Schöppingen
Michael Telgmann

1 Like

Hallo Michael,
Japp, danke. So einfach ist das! Vielleicht sollte man auch öfters auf GitHub vorbei schauen, wenn man Problemchen hat.

Danke für den Hinweis!
Stephan

Hallo Stephan,

danke für die Rückmeldung. Der PR wird dann im nächsten Shopware Update enthalten sein.

Viele Grüße aus Schöppingen
Michael Telgmann