AJAX & PHP - Best Practices?

...komplette Frage anzeigen

2 Antworten

Deinen clientseitigen AJAX-Request würde ich in eine Funktion packen, 

function handle(message, callback)
  $.ajax ({
    type: "POST",
    url: "ajax.php",
    data: message,
    success: function (data) {
      callback(data);
    }
  });
}
  • message ist ein Objekt mit den notwendigen Daten, die verschickt werden sollen
  • callback ist eine Funktion die den Response verarbeitet

Ein Beispielaufruf sähe dann so aus:

handle({ type="start", name="max" }, function(data){ /*...*/ });

oder:
function start(data){ /*...*/ }

handle({ type="start", name="max" }, start);

Bezüglich deines serverseitigen Codes würde ich dir raten, einiges in eigene Funktionen / Methoden zu packen. Die einzelnen switch-cases z.B..
Was es damit auf sich hat:
$game.setPhase(2);

habe ich noch nicht ganz verstanden. Zumal ich denke, dass das ein Syntaxfehler ist.

Dieser Code:

if (isset($_SESSION['game']) && unserialize($_SESSION['game'])->getPhase() == 2) {
$game = unserialize($_SESSION['game']);

gefällt mir auch nicht. Es sieht so aus, als würdest du in jedem Fall erst nach der Existenz von game in der Session fragen, also prüfe das vor dem switch.

Dann würde ich an deiner Stelle das Objekt erst aufschlüsseln, bevor du beginnst, auf dessen Methoden zuzugreifen.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Dreadrasur
06.03.2017, 15:53

Vielen Dank! Dass man in JavaScript Methoden als Parameter übergeben kann, war mir bis jetzt noch garnicht bewusst - danke für den Tipp, das gefällt mir gut.

$game.setPhase(2);

Das ist tatsächlich ein Syntaxfehler, hatte das eben ohne zu testen in GF "gecodet". Der Gedanke war, das Programm in verschiedene Phasen einzuteilen, weil die verschiedenen Aufrufe nur zu bestimmten Zeitpunkten zulässig sind. case:"join_game" darf z.b nur dann aufgerufen werden, wenn das Programm aktuell in Phase 2 ist. Aus demselben Grund die

!isset ($_SESSION["game"])

Abfrage bei case="start", da die Session-Variable ja erst in dem Aufruf erzeugt wird. Existiert sie bereits, heißt das, dass die Phase bereits aufgerufen wurde. Hättest du eine Idee, wie man das eleganter lösen könnte?

0

du könntest dir natürlich auch ein objekt machen

und die $_POST['type'] dann als funktion ausführen .

ob das schicker ist weiss ich nun auch nicht .

in der classe könntest du dann gleich das unserialise automatisieren

und das serialisieren auch .

Aber ob das besser ist ... eigentlich nicht . weil du wirst kaum mehrere objekte

der klasse nützen . und dann ist es auch wieder kein vorteil .

ausserdem greifst du auf sehr viele globale daten zu  und die dann jeweils der funktion mitzugeben ... macht die sache auch nicht wirklich schicker .

wenn könnte man nur die klasse game erweitern .

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?