• Non ci sono risultati.

7 Tecnologie Web: approcci avanzati

N/A
N/A
Protected

Academic year: 2022

Condividi "7 Tecnologie Web: approcci avanzati"

Copied!
17
0
0

Testo completo

(1)

Tecnologie Web:

approcci avanzati

a.a. 2020/2021

7

Anna Goy

(2)

(con jQuery e PHP) AJAX

(3)

AJAX: cos'è - I

AJAX permette di rendere la user experience esperita nell'interazione con le applicazioni web simile a quella esperita nell'interazione con applicazioni stand-alone (installate in locale) [www.html.it/guide/guida-ajax/]

AJAX = Asynchronous JavaScript and XML, coniato nel febbraio del 2005 da Jasse James Garrett, per descrivere un modo di utilizzare congiuntamente diverse tecnologie esistenti:

HTML (e CSS) − client-side

Javascript/jQuery + DOM − client-side

XMLHttpRequest (oggetto Javascript) − client-sideProgrammi server-side (PHP, Servlet, ...)

AJAX è una nuova etichetta per riassumere l'utilizzo congiunto di tecnologie preesistenti

(4)

AJAX: cos'è - II

Applicazioni Web tradizionali → funzionamento sincrono:

• per ogni azione dell'utente (per es. click su un link) il client (browser) invia al server una richiesta (HTTP request) per una nuova pagina

• il client aspetta la risposta del server (e l'utente anche!)

• la risposta del server (HTTP response) contiene l'intera nuova pagina

• ciò comporta uno spreco di banda e un'interfaccia utente più lenta di quanto potrebbe essere

Applicazioni AJAX → funzionamento asincrono:

• quando l'utente compie un'azione (per es. click su un link) l'oggetto

Javascript XMLHttpRequest invia al server una richiesta asincrona (mentre l'utente può continuare ad interagire con la pagina) e parziale (relativa solo ai dati necessari e NON all'intera pagina)

• di conseguenza consentono un'interazione più veloce (la quantità di dati che è necessario inviare al/ricevere dal server è minore) e in modalità asincrona (senza attesa)

(5)

AJAX: un esempio tipico - I

(a)

(b)

(6)

AJAX: un esempio tipico - II

Per passare da (a) a (b):

1) approccio "tradizionale"

 il browser (client) invia al web server l'informazione sul Dip. scelto

 il web server genera una nuova pagina (con il Dip. selezionato nel primo menu e l'elenco dei CdL afferenti a quel Dip. nel secondo menu) e la invia al browser

 il browser mostra la (nuova) pagina 2) approccio AJAX

l'oggetto XMLHttpRequest agisce da client e invia al web server l'informazione sul Dip. scelto

 il web server genera un nuovo menu per la scelta del CdL (contenente i CdL afferenti a quel Dip.) e lo invia al client (oggetto XMLHttpRequest)

 uno script Javascript preleva la risposta del server dall'oggetto

XMLHttpRequest e la inserisce nel punto opportuno della pagina (senza ricaricarla)

(7)

AJAX: cos'è - III

Funzionamento tipico di un'applicazione AJAX:

carichiamo nel browser una pagina web (.html) che contiene degli script client- side (Javascript/jQuery) che intercettano eventi (azioni dell'utente) relativi a elementi della pagina (es: link) identificati mediante il DOM

• in risposta ad un evento (es: click), lo script Javascript/jQuery chiede

all'oggetto XMLHttpRequest di agire da client, cioè di inviare al server una

richiesta (HTTP request), con l'indicazione di una risorsa server-side (es. PHP), cioè un programma da eseguire sul server

• sul server, il programma invocato elabora la risposta e la invia al client, cioè

all'oggetto XMLHttpRequest, da cui lo script client-side la preleva e modifica di conseguenza la pagina, interagendo con gli elementi del DOM

è l'oggetto XMLHttpRequest che agisce da client HTTP nei confronti del web server, cioè invia la HTTP request e riceve la HTTP response del web server!!

(8)

AJAX: cos'è - IV

Server

Br wo

es r HTTP request

(pag.html) HTTP response

(pag.html) HTML + AJAX

(Javascript + XMLHttpRequest)

elaborazione (interpretazione

del codice Javascript)

visualizzazione

richiesta asincrona (non "blocca"

l'interazione con l'utente)

"richiesta"[*]

(rif. risorsa server-side) HttpXML

Request "risposta"[*]

(txt/HTML/XML) requestHTTP HTTP

response

[*] l'oggetto XMLHttpRequest viene gestito all'interno dello script Javascript (client-side)

HTTP Client

1 2

3 5

4

6

(9)

AJAX - cos'è - V

NOTE (di folklore...)

NB1: Il Web Server "non si accorge di niente"! Riceve infatti una "normale"

HTTP request da parte di un HTTP client (l'oggetto XMLHttpRequest) NB2: AJAX non è una via di mezzo tra client-side e server-side (la

computazione non può mai avvenire... "a metà strada"!)... ma l'uso congiunto di tecnologie client-side e server side

NB3: "XMLHttpRequest is the worst named object in the history of JavaScript"

!!! [D. Cameron. A Software Engineer Learns HTML5, JavaScript & jQuery. Cisdal Pub, 2014, p.223]

Qualunque altro nome sarebbe andato meglio... compreso pippo !!

(se preferite, chiamatelo l'innominato...)

(10)

AJAX (con PHP) - I

(2) il sistema colora lo sfondo e invia l'info al server, che la salva in una variabile di sessione (e invia al client un messaggio)

(1) l'utente seleziona un colore di sfondo...

RIF quiz v6

(11)

AJAX (con PHP) - II

Sul client (login_v6.php, BODY):

<FORM method="POST" action="quiz_v6.php">

Che sfondo vuoi? <input type="color" id="colore" required>

<br /><br />

<span id="messaggio"></span>

Username: <input type="text" NAME="username" required>

<br /><br />

Password: <input type="password" NAME="password" required>

<br /><br />

<input type="submit" value="invia">

</FORM> campo con id=colore, su cui

verrà definito un gestore di eventi (event listener)...

elemento del DOM con id=messaggio, che verrà

riempito con il risultato della chiamata AJAX...

(12)

AJAX (con PHP) - III

Sul client (login_v6.php, HEAD):

jQuery(document).ready(function() {

$("#colore").on("change", function() { var col = $("#colore").val();

var col_ok = col.replace("#", "%23");

$.ajax({

url: "sfondo_v6.php", type: "GET",

data: "c="+col_ok, ...

quando il valore del campo con id=colore cambia (vedi primo parametro della funzione on) (=

l'utente ha selezionato un colore), viene eseguita la funzione anonima (secondo parametro della funzione on)...

invio una HTTP request di tipo GET al server (attraverso la funzione ajax, che "maschera"

il ruolo dell'oggetto XMLHttpRequest),

chiedendogli (di eseguire) lo script contenuto in sfondo_v6.php (url) e passandogli un

parametro (data) con il colore selezionato

leggo il colore selezionato

(NB il valore di un campo input type=color è una stringa di 7 caratteri che indica il colore (RGB) in formato esadecimale... che inizia

sempre con # ⇒ devo sostituire # con il codice utf-8 %23 (altrimenti la HTTP request si

confonde...)

RIF: URL encoding

[www.w3schools.com/tags/ref_urlencode.asp]

(13)

AJAX (con PHP) - IV

...

success: function(response) {

$("body").css("background-color", col);

$("#messaggio").html("<p>"+response+"</p>");

},

error: function(xhr, resp, text) { console.log(xhr, resp, text);

$("messaggio").html(xhr+resp+text);

}

}); //ajax }); //on change }); //ready

quando arriva la risposta del server (se NON è un errore), viene eseguita la funzione di callback (funzione anonima, valore dell'attributo success)

NB il parametro di tale funzione (in questo caso response) contiene la risposta del server (HTTP response)

In questo caso, impostiamo lo sfondo[*] e inseriamo il messaggio del server (response) nell'elemento del DOM

se la risposta del server è un errore, lo stampo sulla console e sulla pagina

ATTENZIONE! Va bene solo in fase di sviluppo, perché è una partica che può compromettere la [*] css(p, v): imposta il valore v per la proprietà di stile p dell'oggetto su cui viene invocata

[**] html(s): inserisce la stringa s, passata come parametro, come

contenuto (innerHTML DOM property)

dell'oggetto su cui viene invocata

(14)

AJAX (con PHP) - NOTE

(1) $.ajax({...})

funzione jQuery predefinita che mi permette di inviare una HTTPrequest asincrona (via XMLHttpRequest) al server

• prende come parametro un oggetto JSON [che vedremo più avanti]:

sostanzialmente una lista di parametri per "configurare" la request; i più importanti sono: l'URL (programma server-side da eseguire), eventuali

parametri/dati da inviare al server (data), il metodo (type) ̶ che di default è GET ̶ e la funzione di callback (success), cioè la funzione da eseguire quando arriva la risposta del server

(2) La risposta del server viene automaticamente inserita nel parametro della funzione (anonima) di callback

(3) jQuery(document).ready(function(){...

equivale a $(document).ready(function(){...

(4) $("#argomento").on("change", function(){...

equivale a $("#argomento").change(function(){... MA

change(function()... è applicato agli elementi già esistenti nel DOM

on("change", function()... è applicato anche su event. elem. aggiunti al DOM successivam.

(15)

AJAX (con PHP) - V

Sul server (sfondo_v6.php):

<?php

session_start();

$msg = "Non ho ricevuto il colore...";

if (isset($_GET["c"])) {

$_SESSION["color"] = $_GET["c"];

$msg = "Colore ricevuto (".$_SESSION["color"].") e salvato in una variabile di sessione!";

}

echo $msg;

?>

stampo il messaggio nell'HTTP response (che verrà "intercettata"

da XMLHttpRequest; se ho usato la funzione ajax() di jQuery, si

leggo il parametro dell'HTTP request (c) -- controllando prima che non sia NULL attraverso la funzione isset(x) -- inizializzo una variabile di sessione (color) e imposto il messaggio da inviare al client ($msg)

(16)

AJAX (con PHP) - VI

Single-page applications

si usa spesso costruire applicazioni web single-page: costruisco un'unica pagina HTML e gestisco tutte le interazioni con il server attraverso chiamate AJAX

⇒ non ricarico mai l'intera pagina

[https://www.codeschool.com/beginners-guide-to-web-development/single-page-applications]

Attenzione! L'approccio single-page non è privo di problemi (es. performance, SEO, ...)

Server

Br ow se r

HTML AJAX+ XMLHttp

Req

HT TP cl ie nt

(17)

CASE STUDY: quiz

(versione 6) Aggiorniamo il case study

• nel login, chiediamo all'utente di che colore vuole lo sfondo

• usiamo la scelta dell'utente per impostare il colore di sfondo e per inviare al server una chiamata AJAX con il colore selezionato

• il server (lo script php...) salva il colore in una variabile di sessione (per usarlo nelle pagine successive)

PUT ALL TOGETHER & TRY YOURSELF!

Riferimenti

Documenti correlati

Nei rapporti con gli organi della pubblica amministrazione e i gestori di pubblici servizi i certificati e gli atti di notorietà sono sempre sostituiti dalle

Permettono la configurazione da remoto e la visualizzazione tramite browser web su PC, smartphone, visualizzatori web e tablet dei dati provenienti da: dispositivi di

La console di amministrazione di IIS permette di gestire più server anche in remoto, per default comunque viene mostrato il server locale indicato dal nome del computer.. IIS

Se viene usato un tool di monitoring del server in grado di registrare alcuni dati statistici a livello di sistema, come l'utilizzo della CPU, l'I/O su disco e la cache di

In questo modo M’ conterrebbe un arco del matching appartenente anche al cammino e questo non è possibile per definizione di M’.. Supponiamo che G ammetta un matching

 Vengono scambiati messaggi http (messaggi del protocollo di livello applicativo) tra il browser (client http) e il Web server (server http).  La connessione TCP

Salvatelo col nome ciao.pl ed avviatelo per la verifica, utilizzando il procedimento illustrato nella lezione precedente, se tutto è andato bene e non avete commesso gravi errori

Riaprire il Software Honestech VHS to DVD Riproduce il video sul vostro dispositivo fonte Fare clic sul Tasto Rosso per iniziare la Registrazione Fare clic sul Quadrato Bianco