Was ist der Unterschied zwischen clientseitiger und serverseitiger Programmierung?


498

Ich habe diesen Code:

<script type="text/javascript">
    var foo = 'bar';
    <?php
        file_put_contents('foo.txt', ' + foo + ');
    ?>

    var baz = <?php echo 42; ?>;
    alert(baz);
</script>

Warum schreibt dies nicht "bar" in meine Textdatei, sondern warnt "42"?


NB: Frühere Überarbeitungen dieser Frage betrafen ausdrücklich PHP auf dem Server und JavaScript auf dem Client. Das Wesentliche des Problems und der Lösungen ist für jedes Sprachpaar gleich, wenn eine auf dem Client und die andere auf dem Server ausgeführt wird (auch wenn sie dieselbe Sprache haben). Bitte berücksichtigen Sie dies, wenn Sie Antworten zu bestimmten Sprachen sehen.

Antworten:


460

Ihr Code ist in zwei völlig separate Teile unterteilt, die Server- und die Client-Seite .

                    |
               ---------->
              HTTP request
                    |
+--------------+    |    +--------------+
|              |    |    |              |
|    browser   |    |    |  web  server |
| (JavaScript) |    |    |  (PHP etc.)  |
|              |    |    |              |
+--------------+    |    +--------------+
                    |
  client side       |      server side
                    |
               <----------
          HTML, CSS, JavaScript
                    |

Die beiden Seiten kommunizieren über HTTP-Anfragen und -Antworten. PHP wird auf dem Server ausgeführt und gibt HTML- und möglicherweise JavaScript-Code aus, der als Antwort an den Client gesendet wird, in dem der HTML-Code interpretiert und das JavaScript ausgeführt wird. Sobald PHP die Ausgabe der Antwort beendet hat, wird das Skript beendet und auf dem Server geschieht nichts, bis eine neue HTTP-Anforderung eingeht.

Der Beispielcode wird folgendermaßen ausgeführt:

<script type="text/javascript">
    var foo = 'bar';
    <?php
        file_put_contents('foo.txt', ' + foo + ');
    ?>

    var baz = <?php echo 42; ?>;
    alert(baz);
</script>

Schritt 1, PHP führt den gesamten Code zwischen <?php ?>Tags aus. Das Ergebnis ist folgendes:

<script type="text/javascript">
    var foo = 'bar';

    var baz = 42;
    alert(baz);
</script>

Der file_put_contentsAufruf führte zu nichts, er schrieb nur "+ foo +" in eine Datei. Das<?php echo 42; ?> Aufruf führte zur Ausgabe "42", die sich jetzt an der Stelle befindet, an der sich dieser Code befand.

Dieser resultierende HTML / JavaScript-Code wird jetzt an den Client gesendet, wo er ausgewertet wird. Der alertAufruf funktioniert, während die fooVariable nirgendwo verwendet wird.

Der gesamte PHP-Code wird auf dem Server ausgeführt, bevor der Client überhaupt mit der Ausführung von JavaScript beginnt. Die Antwort enthält keinen PHP-Code mehr, mit dem JavaScript interagieren könnte.

Um PHP-Code aufzurufen, muss der Client eine neue HTTP-Anforderung an den Server senden. Dies kann mit einer von drei möglichen Methoden geschehen:

  1. Ein Link, über den der Browser eine neue Seite lädt.
  2. Eine Formularübermittlung, die Daten an den Server sendet und eine neue Seite lädt.
  3. Eine AJAX- Anforderung, bei der es sich um eine Javascript-Technik handelt, mit der eine reguläre HTTP-Anforderung an den Server gesendet wird (wie 1. und 2.), ohne jedoch die aktuelle Seite zu verlassen.

Hier ist eine Frage, die diese Methode detaillierter beschreibt

Sie können auch JavaScript verwenden, um den Browser dazu zu bringen, eine neue Seite zu öffnen window.locationoder ein Formular zu senden, wobei die Möglichkeiten 1. und 2 emuliert werden.


1
Sie können die zweite window.openSeite auch mit einem Iframe öffnen oder eine Seite laden.
Jcubic

Es kann sinnvoll sein, WebSockets zur Liste der Kommunikationsmethoden hinzuzufügen.
Quentin

Was ist, wenn Dropdown-Werte über jquery aktualisiert werden? Wenn der Benutzer Schritt 2 ausführt. Eine Formularübermittlung, die Daten an den Server sendet und eine neue Seite über die Schaltfläche "Senden" lädt, können die aktualisierten Werte der Abfrage in PHP an einen Controller übergeben werden? Oder wären sie für PHP nicht sichtbar, da sie über JQuery zum Dom hinzugefügt wurden? @deceze
FabricioG

@Fabricio Eine HTTP-Anfrage wird aus dem erstellt <form> Daten und an den Server gesendet. Sie können Formulare mit Javascript bearbeiten, damit sie unterschiedliche Daten enthalten. Ja, diese Daten sind Teil der resultierenden HTTP-Anforderung, wenn sie beim Senden ordnungsgemäß Teil des Formulars sind. Es spielt keine Rolle, ob es im ursprünglichen HTML-Code enthalten war oder anschließend über Javascript hinzugefügt wurde.
Täuschung

163

Um festzustellen, warum PHP- Code in JavaScript- Code nicht funktioniert, müssen wir verstehen, was clientseitige und serverseitige Sprachen sind und wie sie funktionieren.

Serverseitige Sprachen (PHP usw.) : Sie rufen Datensätze aus Datenbanken ab, behalten den Status über die zustandslose HTTP- Verbindung bei und erledigen viele Dinge, die Sicherheit erfordern. Sie befinden sich auf dem Server. Bei diesen Programmen wird der Quellcode niemals dem Benutzer angezeigt.

Bild von wikipedia_http: //en.wikipedia.org/wiki/File: Scheme_dynamic_page_en.svg Bildattr

So können Sie leicht erkennen, dass serverseitige Sprachen HTTP-Anforderungen verarbeiten und verarbeiten. Wie @deceze sagte, wird PHP auf dem Server ausgeführt und gibt HTML- und möglicherweise JavaScript-Code aus, der als Antwort an den Client gesendet wird Der HTML-Code wird interpretiert und JavaScript ausgeführt.

Auf der anderen Seite befinden sich clientseitige Sprachen (wie JavaScript) im Browser und werden im Browser ausgeführt. Clientseitiges Scripting bezieht sich im Allgemeinen auf die Klasse von Computerprogrammen im Web, die clientseitig vom Webbrowser des Benutzers anstelle von serverseitig ausgeführt werden .

JavaScript ist für den Benutzer sichtbar und kann leicht geändert werden. Aus Sicherheitsgründen dürfen wir uns daher nicht auf JavaScript verlassen.

Wenn Sie also eine HTTP- Anforderung auf dem Server stellen, liest der Server zuerst die PHP-Datei sorgfältig, um festzustellen, ob Aufgaben ausgeführt werden müssen, und sendet eine Antwort an die Clientseite. Wiederum, wie @deceze sagte: * Sobald PHP die Ausgabe der Antwort beendet hat, endet das Skript und es passiert nichts auf dem Server, bis eine neue HTTP- Anfrage eingeht. *

Grafische Darstellung

Bildquelle

Was kann ich nun tun, wenn ich PHP aufrufen muss? Dies hängt davon ab, wie Sie dies tun müssen: entweder durch erneutes Laden der Seite oder durch Verwenden eines AJAX-Aufrufs.

  1. Sie können dies tun, indem Sie die Seite neu laden und eine HTTP- Anfrage senden
  2. Sie können einen AJAX-Aufruf mit JavaScript durchführen - dies erfordert kein erneutes Laden der Seite

Gut gelesen:

  1. Wikipedia: Serverseitiges Scripting
  2. Wikipedia: Clientseitiges Scripting
  3. Madara Uchiha: Unterschied zwischen clientseitiger und serverseitiger Programmierung

30

Ihr Javascript wird auf dem Client ausgeführt, nicht auf dem Server. Dies bedeutet, dass dies foonicht auf der Serverseite ausgewertet wird und daher sein Wert nicht in eine Datei auf dem Server geschrieben werden kann.

Der beste Weg, um über diesen Prozess nachzudenken, ist, als würden Sie eine Textdatei dynamisch generieren. Der von Ihnen generierte Text wird erst dann zu ausführbarem Code, wenn der Browser ihn interpretiert. <?phpAuf dem Server wird nur das ausgewertet, was Sie zwischen Tags platzieren.

Übrigens kann die Gewohnheit, zufällige Teile der PHP-Logik in HTML oder Javascript einzubetten, zu ernsthaft verschlungenem Code führen. Ich spreche aus schmerzhafter Erfahrung.


3
Ihre Antwort hier ist bemerkenswert, da sie den / einen Interpeter erwähnt. Javascript kann jedoch in einer Serverumgebung kompiliert und ausgeführt werden, und es kann auch von einem Server interpetiert werden.
Brett Caswell

3

In der Webanwendung wird jede Aufgabe auf eine Art von Anforderung und Antwort ausgeführt.

Die clientseitige Programmierung erfolgt mit HTML-Code mit Java-Skript und seinen Frameworks. Bibliotheken werden im Internet Explorer, in Mozilla und in Chrome-Browsern ausgeführt. Im Java-Szenario werden serverseitige Programmierservlets in den Servern Tomcat, Web-Logic, J Boss und WebSphere ausgeführt

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.