Der Versuch, "Optionen" in Kundendaten zu reproduzieren (und zu korrigieren), ist undefiniert: 90

7

Wir haben sporadisch das folgende Problem, wenn wir an / checkout / cart / sind. Das Klicken auf "Zur Kasse gehen" funktioniert daher nicht.

Wir glauben, dass das Verfahren nicht funktioniert, da der folgende Javascript-Fehler protokolliert wird:

Geben Sie hier die Bildbeschreibung ein

Das Problem war auf zwei Computern auch nach dem erneuten Laden der gesamten Seite reproduzierbar. Aber jetzt geht es nicht mehr.

Ich habe mir den Code in Zeile 90 angesehen

    getFromServer: function (sectionNames, forceNewSectionTimestamp) {
        var parameters;

        sectionNames = sectionConfig.filterClientSideSections(sectionNames);
        parameters = _.isArray(sectionNames) ? {
            sections: sectionNames.join(',')
        } : [];
        parameters['force_new_section_timestamp'] = forceNewSectionTimestamp;

/** Line 90 **/ return $.getJSON(options.sectionLoadUrl, parameters).fail(function (jqXHR) {
            throw new Error(jqXHR);
        });
    }
};

Offensichtlich werden die Optionen nicht irgendwie geladen - aber sie befinden sich im Konstruktor. Wie kann das sein?

Gerne für jede Hilfe.

BEARBEITEN

Ich habe das Problem auf ein Modul zurückgeführt, in dem wir mit Kundendaten interagieren.

Wir haben den folgenden Code:

define([
    'jquery',
    'Magento_Customer/js/model/authentication-popup',
    'Magento_Customer/js/customer-data'
], function ($, authenticationPopup, customerData) {

    customerData.reload(['minvalue'],true).done(function(){

In einigen Fällen scheint dieser Code vor dem Konstruktor aufgerufen zu werden

vendor/magento/module-customer/view/frontend/web/js/customer-data.js:366


    'Magento_Customer/js/customer-data': function (settings) {
        options = settings;
        invalidateCacheBySessionTimeOut(settings);
        invalidateCacheByCloseCookieSession();
        customerData.init();
    }

Frage: Wie kann ich die Ausführung meines Codes erzwingen, nachdem der Konstruktor ausgeführt wurde?

Alex
quelle
1
Vielleicht ist es ein Zeitproblem?
Daniel
2
Werfen Sie einen Blick auf diese github.com/magento/magento2/issues/6410#issuecomment-243704461
Tuyen Nguyen
@alex Können Sie den vollständigen JS-Trace-Fehlerstapel veröffentlichen?
obskure
@obscure Ich kann nicht, weil ich nicht reproduzieren kann
Alex
@TuyenNguyen Wir haben kürzlich ein Magento-Update von 2.2.6 auf 2.2.8 durchgeführt ... Wenn ich also verstehe, dass Sie richtig verlinken, geschieht dies für Personen, die den 2.2.6-Shop und nicht den 2.2.8-Shop angesehen haben? Der Kommentar schlägt vor, den Browser-Cache und den lokalen Speicher zu löschen - aber das würde benutzerdefinierten Code erfordern, oder? Magento kümmert sich nicht darum?
Alex

Antworten:

2

Normalerweise werden die customer-data.jsFehler durch lokale Speicherprobleme im Browser verursacht, nachdem Module deaktiviert wurden, die dem Kundendatenobjekt Abschnitte hinzufügen (meiner Erfahrung nach).

1 Kunde (PC) sieht den Fehler möglicherweise, andere jedoch nicht.

Die Lösung in meinem Fall (obwohl etwas anders als bei Ihnen) bestand darin, den lokalen Speicher des Browsers zu löschen, was über die Browser-Debugging-Tools auf der storageRegisterkarte in Firefox oder der applicationRegisterkarte in Chrome erfolgen kann. Und löschen Sie Magentos Cache.

Wenn dies nicht funktioniert, würde ich alle kürzlich installierten Module überprüfen, die customer-datadas mit dem Kunden verbundene Objekt oder die Magento-Funktionalität ändern (dh versuchen Sie, die benutzerdefinierten Module 1 zu 1 zu deaktivieren).

Lez
quelle
Vielen Dank. Problem ist immer noch, dass ich es nicht reproduzieren kann. Das Deaktivieren der Module 1 zu 1 usw. hilft also nicht, da ich nach dem Deaktivieren eines Moduls nicht überprüfen kann, ob es funktioniert
Alex
1
Ohne das Problem reproduzieren zu können, kann kein angebotener Vorschlag / keine angebotene Lösung wirklich getestet werden. Es könnte sich also um ein vorübergehendes Problem handeln, das durch einen externen Faktor (den Sie nicht berücksichtigen können) oder eine bestimmte Kombination aus Kunde / Benutzer verursacht wurde Aktionen. Ich würde vorschlagen, zuerst das Problem reproduzieren zu können, bevor Sie versuchen, es zu beheben.
Lez
1
Sie können versuchen, es zu reproduzieren, indem Sie alle Sitzungen und den lokalen Speicher löschen, ein Downgrade auf 2.2.6 durchführen, zu / checkout / cart gehen und auf "Weiter zur Kasse" klicken und dann erneut aktualisieren und prüfen, ob der Fehler erneut angezeigt wird. Dies ist ein ziemlicher Aufwand, kann Ihnen jedoch dabei helfen, zu überprüfen, ob es sich um ein Problem mit dem lokalen Speicher handelt.
Daniel
@Lez: Die Frage fragt, wie ich das reproduzieren kann :-)
Alex
1
@Alex hehe, das habe ich in der Überschrift total verpasst ... obwohl ich nie versuchen würde, dies persönlich zu reproduzieren (da ich viele Kopfschmerzen beim Debuggen solcher Probleme hatte, als ich mit M2 anfing), aber wenn du dich selbst "quälen" willst, Ich würde mit Daniels Antwort gehen. Aber wenn ich eine fundierte Vermutung anstellen sollte, wurde das Problem höchstwahrscheinlich durch den Unterschied verursacht, dass Kundenabschnitte nach dem Upgrade auf M2.2.8
Lez
2

Wie in diesem Problemkommentar erwähnt , ist es wahrscheinlich, dass dieser Fehler durch ein lokales Speicherproblem nach dem Upgrade von 2.2.6 auf 2.2.8 verursacht wird.

Um Ihren Fehler zu reproduzieren, können Sie die folgenden Schritte ausführen:

  1. Löschen Sie in Ihrem Browser alle lokalen Daten Ihrer Website
  2. Magento auf 2.2.6 zurückstufen
  3. Besuchen Sie den Warenkorb und fahren Sie mit der Kasse fort
  4. Aktualisieren Sie Ihr Magento erneut
  5. Gehen Sie erneut zum Warenkorb und versuchen Sie, zur Kasse zu gehen

Ich denke, dies ist ein ziemlicher Aufwand, könnte Ihnen aber helfen, zu reproduzieren und zu überprüfen, ob dieser Fehler durch den lokalen Speicher verursacht wird oder nicht.

Daniel
quelle
Ich habe es versucht, aber Schritt 1 vergessen ... Ich denke, ich werde es noch einmal versuchen
Alex
1

Wir haben dies auf eine benutzerdefinierte Komponente zurückgeführt, die überschreibt

vendor / magento / module-checkout / view / frontend / web / js / weiter zum checkout.js

return function (config, element) {
    ### basically our change
    customerData.reload(['minvalue'], true);
    var minOrderValue = customerData.get('minvalue');
    ## end of our changee
    $(element).click(function (event) {
        var cart = customerData.get('cart'),
            customer = customerData.get('customer');

        ## do something with minOrderValue here

        event.preventDefault();

        if (!customer().firstname && cart().isGuestCheckoutAllowed === false) {
            authenticationPopup.showModal();

            return false;
        }
        $(element).attr('disabled', true);
        location.href = config.checkoutUrl;
    });

};

Dies scheint sehr seltene, aber hässliche Rennbedingungen zu verursachen. customerData.reload kann aufgerufen werden, auch der Konstruktor von customerData wurde nicht ausgeführt.

Wir sind jetzt einfach umgezogen

 customerData.reload(['minvalue'], true);

in den Klick-Handler, also sollte er definitiv etwas später aufgerufen werden.

Aber ich finde das sehr hässlich. Der Konstruktor wird von Magento aufgerufen main.jsund ich denke, wenn jemand schnell genug klickt, funktioniert er immer noch nicht richtig.

Aber da der Kern es genauso macht, sollte dies funktionieren; und zumindest kann der Benutzer erneut klicken (was er vorher nicht konnte, weil die Initialisierung fehlgeschlagen ist)

Wir haben einen Javascript-Fehlerprotokollierer auf dem System und werden nach einigen Tagen wissen, ob der Fehler erneut aufgetreten ist.

Alex
quelle