Raketenwilli: Priorität sollte "schwer wiegender logischer Fehler" sein: „Bäh! Alte statt frische Brötchen!“

Beitrag lesen

Habe auf die html-Seite einen <Div>.addEventListener( "click" ... gesetzt, und bei Betätigung desselben läuft alles wie es soll.

Da Du mit einer globalen Variable arbeitest (so etwas krudes musste man anno 1990 in BASIC tun, in JS kann man die damit geradezu zwangsläufig verbundenen Irrtümer durch Aufruf parametrisierter Funktionen und Objektmethoden einfach vermeiden) wirst Du, im Hinblick auf Rolfs Ausführungen zum asynchronen fetch(), hierbei nicht mit der aktuellen sondern mit der vorherigen (alten) Antwort des Servers arbeiten.

Das ist so, wie Du meinst, dass Du jetzt „frische Brötchen“ einkaufst, die dann aber irgendwo parkst und im Glauben an deren Frische die alten Brötchen aus dem Brotkasten isst. Die sind aber „Bäh!“

  • fetch(): hole neue Daten ... und schreibe nach Ankunft in Variable A

  • Lese jetzt Daten aus Variable A und schreibe diese ins Dokument.

Es wird sofort - vor der Ankunft der neuen Daten - aus Variable A gelesen.

Von Prio "WICHTIG" auf "Interesse" heruntergestuft.

Das ist ein schwerer Fehler in der Programmlogik: Du hast zwar Daten, es sind aber nicht die erwarteten. Das merkst Du aber erst wenn Du in das nur vermeintlich frische Brötchen beißt.

Wenn sich die Daten - oder der Request - hingegen nie ändern, dann hättest Du zwar korrekte Daten, aber was soll dann der wiederholte Request? Ändern sich die Daten (z.B. in der Datenbank) nicht, aber Parameter des Request dann hast Du in Deiner Variable zwar irgendwelche Daten - nur eben nicht diejenigen, die zum Request passen.

Was Du willst ist:

  • fetch(): hole neue Daten und schreibe diese nach Ankunft ins Dokument.
  • (Der Umweg über die globale Variable ist gar nicht nötig)

Ich selbst bin übrigens kein Freund davon, erst einmal eine leere Webseite zu liefern und dann endlose Reihen von solchen Requests zu starten um die auf der Webseite abzuholenden Inhalte abzuholen. Das Ergebnis solchen Tuns sind dann Webseiten, die erst mal erscheinen aber eben den erwarteten Inhalt nicht haben (und das eine ganze Weile lang, weil erst mal die mich nicht interessierende Werbung geladen wird, bzw. geladen werden soll) → was einen schnellen, reflexartigen Druck auf STRG+r nach sich zieht → wenn das selbe Zeug wieder kommt (das tut es dann), geht's zurück zur Suchmaschine.

Besser ist es, den „Krempel“ (oder wenigstens die Daten) schon bei der Lieferung der Webseite mit zuliefern (und eventuell mit JS die Tabellen zu erzeugen - oder was immer Du vor hast). Auch Java-Script-Geraffel wie

<script>
var a=['foo', 'bar', 'baz'];
</script>

kann man auch mit PHP erzeugen:

<?php
$arr=['foo', 'bar', 'baz'];
echo   '<script>'
     . PHP_EOL
     . "\t"
     . "let a=[ '"
     . implode( "', '", $arr )
     . "' ];"
     . PHP_EOL
     . '</script>'
;

Erzeugt:

<script>
	let a=[ 'foo', 'bar', 'baz' ];
</script>