Ich habe eine harte Zeit, selbst diese Frage zu stellen, weil ich nicht verstehe, was vor sich geht.Javascript-Methode funktioniert und funktioniert nicht
Grundsätzlich habe ich ein rotierendes Ladeelement, das angezeigt werden soll, während mein Javascript läuft. Am Ende des Javascript sollte der Loader ausgeschaltet werden und ein Modal sollte mit Daten angezeigt werden, die von einer Datenbank abgefragt wurden. Das Problem ist, dass der Loader niemals angezeigt wird. Es dauert ungefähr 1 - 2 Sekunden, bis die Abfragen ausgeführt werden, bevor das Modal erstellt wird.
function includeConnectionJS() {
if (!(typeof sforce === "object")) {
var connectionJS = document.createElement('script');
var documentHead = document.getElementsByTagName('head')[0];
connectionJS.src = '/soap/ajax/38.0/connection.js';
connectionJS.setAttribute('onload', 'createLoader();createModal();');
documentHead.appendChild(connectionJS);
} else {
createLoader();
// Checks to see if the loader element exists. If it does not, create the element and than toggle it to display it.
// If the element already exists, display the modal
createModal();
// Checks to see if the modal element exists, if it does not, create the element and than turn off the loader and display the modal.
// If the element already exists, turn off the loader and display the modal
}
}
Ich habe console.logs in meinen Methoden und ich kann deutlich sehen, dass die Methode aufgerufen wird, wird die if-Anweisungen sind alle vorbei und die Sichtbarkeit des Elements zu den richtigen Zeiten auf die richtigen Werte zu verändern. Alles deutet darauf hin, dass es funktionieren sollte, aber das Element wird nie wirklich angezeigt.
Ich war in der Lage, es zu erhalten, indem Sie den Anruf zu createModal anzuzeigen, um wie folgt aussehen: nur eine künstliche Verzögerung
setTimeout(function(){createModal()}, 100); // Most values for delay worked.
Ich will nicht schaffen Lader Wirkung zeigen.
Meine Hauptsorge ist, dass die createModal-Methode Aufrufe an die Datenbank macht. Diese verursachen Verzögerungen in der JavaScript-Ausführung (ich nenne sie synchron, nicht asynchron). Ich kann deutlich sehen, dass die Loader-Anzeige vor den Abfragen auf "Blockieren" eingestellt ist, alle Abfragen abwarten und zurückkehren und die Anzeige des Loaders in der richtigen Reihenfolge wieder auf "none" wechseln. Mehr als das, wenn ich die createLoader() aufrufen; Methode direkt von der Konsole aus, es funktioniert.
Ich kann einfach nicht herausfinden, was ich vermisse.
Alles, was Sie beschreiben, von der richtigen Reihenfolge bis 'setTimeout'" Fixing "klingt wie' createModal() 'schaltet den Loader zu früh aus. Wir können Ihnen nicht helfen, ohne den Rest Ihres Codes zu sehen. Ein Schuss im Dunkeln: Wenn Sie JS sagen wollen, A() nach B zu tun, müssen Sie 'function() {A(); } ', im Gegensatz zu' A(); '. –
@ChrisG Nein, es liegt in der Natur von Javascript, Aktualisierungen der Benutzeroberfläche zu blockieren, bis der Code vollständig ausgeführt wurde. Auch Javascript wird sequentiell in einem einzelnen Thread ausgeführt, so dass 'A' immer nach' B' für 'B() ausgeführt wird; A(); '. 'A' kann niemals beginnen, bis' B' beendet ist –