Javascript und die Verarbeitung einer Variable aus externer Datei

Diskutiere Javascript und die Verarbeitung einer Variable aus externer Datei im JavaScript Forum im Bereich Programmierung; Hallo zusammen, folgendes schwebt mir vor: Ich möchte einen Counter auf dem Server hinterlegen (in Form einer TXT Datei, das wäre aber kein Muss...
T

TRF

Member
Dabei seit
09.03.2021
Beiträge
5
Hallo zusammen,

folgendes schwebt mir vor: Ich möchte einen Counter auf dem Server hinterlegen (in Form einer TXT Datei, das wäre aber kein Muss, nur MySql möchte ich nach Möglichkeit umgehen), dieser soll allerdings nur hochzählen, wie oft eine bestimmte Javascript-Funktion aufgerufen wird.


Mal ein Anwendungsbeispiel: In einer HTML Datei kann ein Nutzer würfeln indem er auf nen Button klickt. Die Würfelzahl wird angezeigt und gleichzeitig in einer entsprechenden Datei gespeichert und angezeigt, wie oft diese Würfelzahl insgesamt schon gekommen ist. Die Datei darf also auch erst in dem Moment ausgelesen werden, wenn gewürfelt wird, nicht schon mit dem Laden der Seite (für den Fall mehrerer gleichzeitiger Aufrufe)

Rein mit Javascript kann es ja nicht gehen, da ich hier nur Clientbasiert arbeite. Wie aber realisiere ich dieses (beispielhafte) Vorhaben nun?

Danke und Gruß
Mathias
 
Zuletzt bearbeitet:
A

AndreasB

Active member
Dabei seit
17.12.2020
Beiträge
34
Du kannst das zB mit Hilfe vom localStorage umsetzen.

Du hast aber auf jeden Fall das Problem mit den gleichzeitigen Aufrufen in verschiedenen Browser-Fenstern/-Tabs.
Das hast du aber auch, wenn du eine Datenbank verwendest.
 
T

TRF

Member
Dabei seit
09.03.2021
Beiträge
5
localStorage speichert es aber auch nur für die aktuelle Sitzung. Ich möchte es ja eher global speichern, so dass (dem Beispiel folgend) die Würfe verschiedener Nutzer gespeichert werden.

Hab es aber inzwischen Gelöst bekommen mit nem klassischen Ajaxrequest. Den kann man ja auch problemlos in eine JS-Funktion einbauen und damit entsprechend ne kleine PHP Datei aufrufen, die dann das auslesen und erhöhen der Zahl in der TXT übernimmt.
 
A

AndreasB

Active member
Dabei seit
17.12.2020
Beiträge
34
So geht das auch.
Übrigens:
localStorage speichert es aber auch nur für die aktuelle Sitzung.
Das macht sessionStorage so.

localStorage speichert es so lange, bis es gecleared wird.

Wenn du es aber global speichern möchtest, benötigst du natürlich Serverseitingen Code.
Wie hast du das Problem mit den Mehrfachen Browser-Instanzen gelößt?
 
A

AndreasB

Active member
Dabei seit
17.12.2020
Beiträge
34
PS: Du sagst, dass. du es in eine .txt Datei schreibst.
Ich würde dir empfehlen es ein eine .json Datei zu schreiben, dann hast du weniger Probleme beim Serialisieren und beim Parsen.
 
T

TRF

Member
Dabei seit
09.03.2021
Beiträge
5
Um es nochmal an dem Würfelbeispiel zu verdeutlichen: Der Aufruf der PHP Datei und somit der gespeicherten TXT Datei erfolgt erst beim Klick auf den Würfelbutton. Somit also unabhängig vom Seitenaufruf und auch unabhängig davon, wie viele Instanzen gleichzeitig geöffnet wurden. Die Javascriptfunktion reagiert erst auf den Klick und dann wird sofort der Counter (je nach Ergebnis) hochgesetzt. Somit gibt es da keine Kollisionen.


Code:
<?php
// Counter
$Dateiname = "Counter.txt";

$Datei = fOpen($Dateiname,"r+");
$Zaehler = fGets($Datei,255);
fClose($Datei);

$Zaehler++;

$Datei = fOpen($Dateiname,"w");
fPuts($Datei,$Zaehler);
fClose($Datei);

echo $Zaehler;
?>

So sieht die PHP aus

aufgerufen wird sie in der entsprechenden Funktion im Javascript dann so:


Code:
var Request = new XMLHttpRequest();
         Request.onload = function() {

              //hier kommt das rein, was Javascript dann veranstalten soll
        }
         };
         Request.open("get", "Datei.php", true);
          Request.send();

Meine eigene Anwendung ist nicht der Würfel, aber durchaus ähnlich, da auch hier mit verschiedenen Fällen und ner Zufallszahl gearbeitet wird.

JSON ist ein guter Hinweis, die TXT hab ich jetzt auch hauptsächlich zu Testzwecken genutzt.
 
A

AndreasB

Active member
Dabei seit
17.12.2020
Beiträge
34
basti1012 hat recht, das führt zu einer race condition, wenn versucht wird auf die Datei gleichzeitig mehrfach zuzugreifen.
Die Frage ist allerdings, ist das bei deinem Programm relevant? kann es vorkommen, dass zwei Spieler nahezu gleichzeitig den Request absenden?

Und dann ist die Frage was dann passieren soll.
Ist es schlimm, wenn ein Funktionsaufruf verloren geht?
Wenn nicht, behandele den Fehler der auftritt wenn versucht wird die Datei zum Lesen zu öffnen mit einem 500er und gut is.

Wenn der Fall öfters vorkommen kann, kannst du natürlich auch die Datei sperren.
ich kenne mich nicht mit flock() aus, aber ich denke mir, dass du dann allerdings in einer Schleife solange warten musst bis die Datei wieder freigegeben wurde.
 
Thema:

Javascript und die Verarbeitung einer Variable aus externer Datei

Oben