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:
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?
quelle
Antworten:
Normalerweise werden die
customer-data.js
Fehler 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
storage
Registerkarte in Firefox oder derapplication
Registerkarte 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-data
das mit dem Kunden verbundene Objekt oder die Magento-Funktionalität ändern (dh versuchen Sie, die benutzerdefinierten Module 1 zu 1 zu deaktivieren).quelle
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:
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.
quelle
Wir haben dies auf eine benutzerdefinierte Komponente zurückgeführt, die überschreibt
vendor / magento / module-checkout / view / frontend / web / js / weiter zum checkout.js
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
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.js
und 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.
quelle