Qual è la differenza tra la programmazione lato client e lato server?


498

Ho questo codice:

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

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

Perché questo non scrive "bar" nel mio file di testo, ma avvisa "42"?


NB: le revisioni precedenti di questa domanda riguardavano esplicitamente PHP sul server e JavaScript sul client. La natura essenziale del problema e delle soluzioni è la stessa per qualsiasi coppia di lingue quando una è in esecuzione sul client e l'altra sul server (anche se sono la stessa lingua). Ti preghiamo di tenerne conto quando vedi le risposte che parlano di lingue specifiche.

Risposte:


460

Il codice è diviso in due parti completamente separate, il lato server e il lato client .

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

Le due parti comunicano tramite richieste e risposte HTTP. PHP viene eseguito sul server e genera codice HTML e forse JavaScript che viene inviato come risposta al client in cui viene interpretato l'HTML e viene eseguito JavaScript. Una volta che PHP ha terminato di inviare la risposta, lo script termina e sul server non accadrà nulla finché non arriva una nuova richiesta HTTP.

Il codice di esempio viene eseguito in questo modo:

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

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

Passaggio 1, PHP esegue tutto il codice tra i <?php ?>tag. Il risultato è questo:

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

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

La file_put_contentschiamata non ha prodotto nulla, ha semplicemente scritto "+ pippo +" in un file. La <?php echo 42; ?>chiamata ha prodotto l'output "42", che è ora nel punto in cui si trovava quel codice.

Questo codice HTML / JavaScript risultante viene ora inviato al client, dove viene valutato. La alertchiamata funziona, mentre la foovariabile non viene utilizzata da nessuna parte.

Tutto il codice PHP viene eseguito sul server prima ancora che il client inizi a eseguire uno qualsiasi dei JavaScript. Non è rimasto alcun codice PHP nella risposta con cui JavaScript potrebbe interagire.

Per chiamare un codice PHP, il client dovrà inviare una nuova richiesta HTTP al server. Questo può accadere usando uno dei tre metodi possibili:

  1. Un collegamento, che consente al browser di caricare una nuova pagina.
  2. Un modulo di invio, che invia i dati al server e carica una nuova pagina.
  3. Una richiesta AJAX , che è una tecnica Javascript per effettuare una normale richiesta HTTP al server (come 1. e 2.), ma senza uscire dalla pagina corrente.

Ecco una domanda che delinea questi metodi in modo più dettagliato

Puoi anche usare JavaScript per aprire il browser in una nuova pagina usando window.locationo inviando un modulo, emulando le possibilità 1. e 2.


1
Puoi anche aprire una seconda pagina usando window.openo caricare una pagina usando un iframe.
jcubic,

Potrebbe valere la pena aggiungere WebSocket all'elenco dei metodi di comunicazione.
Quentin,

E se diciamo che i valori a discesa vengono aggiornati tramite jquery. Quando l'utente esegue il passaggio 2. Un invio del modulo, che invia i dati al server e carica una nuova pagina, tramite il pulsante "Invia" i valori aggiornati di jquery potrebbero essere passati a un controller in php? O non sarebbero visibili a php poiché è stato aggiunto al dom tramite jquery? @deceze
FabricioG

@Fabricio Una richiesta HTTP verrà creata dai <form>dati e inviata al server. Puoi manipolare i moduli utilizzando Javascript per farli contenere dati diversi. Sì, tali dati faranno parte della richiesta HTTP risultante se fanno correttamente parte del modulo al momento dell'invio; non importa se fosse nell'HTML originale o aggiunto successivamente tramite Javascript.
Inganno

163

Per determinare perché il codice PHP non funziona nel codice JavaScript , dobbiamo capire quali sono le lingue lato client e lato server e come funzionano.

Linguaggi lato server (PHP ecc.) : Recuperano i record dai database, mantengono lo stato tramite la connessione HTTP senza stato e fanno molte cose che richiedono sicurezza. Risiedono sul server, questi programmi non hanno mai il loro codice sorgente esposto all'utente.

Immagine da wikipedia_http: //en.wikipedia.org/wiki/File: Scheme_dynamic_page_en.svg immagine attr

Quindi puoi facilmente vedere che le lingue lato server gestiscono le richieste HTTP e le elaborano e, come diceva @deceze, PHP viene eseguito sul server e genera un codice HTML, e forse un codice JavaScript, che viene inviato come risposta al client, dove l'HTML viene interpretato e viene eseguito JavaScript.

D'altra parte, le lingue lato client (come JavaScript) risiedono nel browser ed eseguono nel browser. Gli script lato client si riferiscono in genere alla classe di programmi per computer sul Web che vengono eseguiti sul lato client, dal browser Web dell'utente, anziché sul lato server .

JavaScript è visibile all'utente e può essere facilmente modificato, quindi per motivi di sicurezza non dobbiamo fare affidamento su JavaScript.

Pertanto, quando si effettua una richiesta HTTP sul server, il server prima legge attentamente il file PHP per vedere se ci sono attività che devono essere eseguite e invia una risposta al lato client. Ancora una volta, come diceva @deceze, * Una volta che PHP ha terminato di inviare la risposta, lo script termina e non accadrà nulla sul server fino a quando non arriva una nuova richiesta HTTP . *

Rappresentazione grafica

Fonte immagine

Quindi ora cosa posso fare se devo chiamare PHP? Dipende da come è necessario farlo: ricaricando la pagina o utilizzando una chiamata AJAX.

  1. Puoi farlo ricaricando la pagina e inviando una richiesta HTTP
  2. È possibile effettuare una chiamata AJAX con JavaScript: non è necessario ricaricare la pagina

Buona lettura:

  1. Wikipedia: scripting lato server
  2. Wikipedia: scripting lato client
  3. Madara Uchiha: Differenza tra programmazione lato client e lato server

30

Il tuo Javascript verrà eseguito sul client, non sul server. Ciò significa che foonon viene valutato sul lato server e quindi il suo valore non può essere scritto in un file sul server.

Il modo migliore per pensare a questo processo è come generare dinamicamente un file di testo. Il testo che stai generando diventa codice eseguibile solo quando il browser lo interpreta. Solo ciò che si inserisce tra i <?phptag viene valutato sul server.

A proposito, prendere l'abitudine di incorporare pezzi casuali di logica PHP in HTML o Javascript può portare a codice seriamente contorto. Parlo per esperienza dolorosa.


3
La tua risposta qui è degna di nota in quanto menziona l'interprete / a. Tuttavia, javascript può essere compilato ed eseguito in un ambiente server e può essere interpretato anche da un server.
Brett Caswell

3

Nell'applicazione Web ogni attività viene eseguita in un modo di richiesta e risposta.

La programmazione lato client è con codice HTML con script Java e relativi framework, le librerie vengono eseguite in Internet Explorer, Mozilla, i browser Chrome. Nello scenario java i servlet di programmazione lato server vengono eseguiti nei server Tomcat, web-logic, j boss, WebSphere

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.