Rolf B: PHP aus JavaScript heraus aufrufen

Beitrag lesen

Hallo Aragorn,

schön, dass die Wiederauferstehung deines Kontos funktioniert hat 😉

Ein paar Hinweise noch

(1) Ein Forms-Login muss zwingend über https erfolgen, weil das Passwort sonst unverschlüsselt über die Leitung geht.

(2) Der Code

.then(function(sndResp) {
      notifyLogin(sndResp);
   });

lässt sich zu

.then(notifyLogin);

verkürzen. Eine Adapterfunktion ist nicht nötig.

(3) Den JSON.parse in notifyLogin kannst Du Dir sparen, wenn Du im ersten .then den Aufruf response.json() verwendest.

(4) Nach dem Login wirst Du vermutlich einiges im DOM umbauen müssen, denn nach gelungenem Login ist der User sicherlich auch für mehr berechtigt.

(5) Denk dran, dass fetch auch fehlschlagen kann. Und zwar dann, wenn der Request an sich fehlschlägt. Wenn Du eine Serverantwort erhältst, selbst mit HTTP Statuscode 50x, bekommst Du ein Response-Objekt. response.ok ist nur für Statuscodes 2xx gegeben, aber du wirfst eine Exception, wenn das nicht der Fall ist. Der throw lehnt das Promise aus dem ersten .then() ab, woraufhin Du nicht mehr in den zweiten .then() kommst. Aber du kommst auch sonst nirgends hin, du wirst im Browser-Log nur eine Meldung finden, dass Dir ein abgelehntes Promise durchgeflutscht ist.

Ans Ende der Kette gehört ein .catch().

Möglichkeit 1: direkt in startLogin

Möglichkeit 2: du gibst das Promise aus dem zweiten .then() an den Aufrufer zurück und hängst den .catch() dorthin. Das meine ich so:

startLogin(mail, pw)
.catch(function(error) {
   // handle error
});

startLogin(aMailAdr, aPassWd) {
   ...
   return fetch("serverLogin.php", { ... })
   .then(...)
   .then(...);
}

Das return steht vor fetch(), weil fetch().then().then() ein Riesenausdruck ist. Mit async/await ist das transparenter.

Welche Möglichkeit für Dich besser ist, musst Du beurteilen.

Rolf

--
sumpsi - posui - obstruxi