AJAX è un acronimo che sta per Asynchronous Javascript e XML. In realtà, AJAX non è una tecnologia nuova, poiché sia Javascript che XML sono in circolazione da un po' di tempo, e AJAX è una sintesi di queste tecnologie. AJAX è spesso associato al termine Web 2.0 e pubblicizzato come l'applicazione Web più recente.
Con AJAX, non è necessario aggiornare l'intera pagina ogni volta, poiché viene aggiornata solo una parte specifica di essa. È molto più conveniente, dal momento che non devi aspettare a lungo, e più economico, dal momento che non tutti hanno Internet illimitato. È vero, in questo caso, lo sviluppatore deve assicurarsi che l'utente sia a conoscenza di ciò che sta accadendo sulla pagina. Questo può essere fatto utilizzando indicatori di caricamento, messaggi di testo che indicano che i dati vengono scambiati con il server. Dovrebbe anche essere chiaro che non tutti i browser supportano AJAX (versioni precedenti di browser e browser di testo). Inoltre Javascript può essere disabilitato dall'utente. Pertanto, non dovresti abusare dell'uso della tecnologia e ricorrere a metodi alternativi di presentazione delle informazioni sul sito Web.
Per riassumere i vantaggi di AJAX:
- La possibilità di creare una comoda interfaccia Web
- Interazione attiva dell'utente
- La comodità d'uso
Scambio di dati
Per poter scambiare dati, nella pagina deve essere creato un oggetto XMLHttpRequest, che è una sorta di mediatore tra il browser dell'utente e il server (Fig. 1). Usando XMLHttpRequest, puoi inviare una richiesta al server, così come ricevere una risposta sotto forma di vari tipi di dati.
Ci sono due modi per scambiare dati con il server. Il primo modo è una richiesta GET. In questa richiesta, si accede a un documento sul server passandogli argomenti tramite l'URL stesso. In questo caso, lato client, sarà logico utilizzare la funzione di escape di Javascript in modo che alcuni dati non interrompano la richiesta.
La parte client, scritta in Javascript, deve fornire le funzionalità necessarie per comunicare in modo sicuro con il server e fornire metodi per lo scambio di dati in uno dei modi sopra indicati. Il lato server deve elaborare i dati di input e sulla base di essi generare nuove informazioni (ad esempio, lavorando con un database) e restituirle al client. Ad esempio, per richiedere informazioni al server, è possibile utilizzare una normale richiesta GET con il trasferimento di diversi parametri di piccole dimensioni, e per aggiornare le informazioni, o aggiungere nuove informazioni, sarà necessario utilizzare una richiesta POST, poiché consente trasferire grandi quantità di dati.
Come già affermato, AJAX utilizza il trasferimento dati asincrono. Ciò significa che mentre è in corso il trasferimento dei dati, l'utente può eseguire altre azioni di cui ha bisogno. In questo momento, dovresti avvisare l'utente che è in corso un qualche tipo di scambio di dati, altrimenti l'utente penserà che sia successo qualcosa e potrebbe lasciare il sito, o richiamare una funzione che è "congelata", a suo avviso. L'indicazione durante lo scambio di dati in un'applicazione Web 2.0 gioca un ruolo molto importante: i visitatori potrebbero non essere ancora abituati a questo modo di aggiornare la pagina.
La risposta dal server può essere non solo XML, come suggerisce il nome della tecnologia. Oltre a XML, puoi ottenere una risposta in testo normale o JSON (Javascript Object Notation). Se la risposta è stata ricevuta in testo normale, può essere immediatamente visualizzata in un contenitore sulla pagina. Quando viene ricevuta una risposta XML, il documento XML risultante viene in genere elaborato sul lato client e i dati vengono convertiti in (X) HTML. Quando riceve una risposta JSON, il client deve solo eseguire il codice ricevuto (la funzione Javascript eval) per ottenere un oggetto Javascript completo. Ma qui è necessario fare attenzione e tenere conto del fatto che utilizzando questa tecnologia è possibile trasmettere codice dannoso, quindi, prima di eseguire il codice ricevuto dal server, dovrebbe essere attentamente controllato ed elaborato. Esiste una pratica come una richiesta "fittizia", in cui non viene ricevuta alcuna risposta dal server, vengono modificati solo i dati sul lato server.
Questo oggetto ha proprietà diverse in browser diversi, ma in generale è lo stesso.
Metodi oggetto XMLHttpRequest
Nota che i nomi dei metodi sono scritti nello stesso stile Camel delle altre funzioni Javascript. Fai attenzione quando li usi.
interrompere ()- cancellazione della richiesta in corso al server.
getAllResponseHeaders ()- ottenere tutte le intestazioni di risposta dal server.
getResponseHeader ("nome_intestazione")- ottenere il titolo specificato.
open ("tipo_richiesta", "url", "asincrono", "nome utente", "password")- inizializzazione di una richiesta al server, indicazione della modalità di richiesta. Il tipo di richiesta e l'URL sono parametri obbligatori. Il terzo argomento è un valore booleano. Di solito è sempre specificato come vero o non specificato affatto (il valore predefinito è vero). Il quarto e il quinto argomento vengono utilizzati per l'autenticazione (è molto insicuro memorizzare i dati di autenticazione in uno script, poiché qualsiasi utente può visualizzare lo script).
inviare ("contenuto")- inviare una richiesta HTTP al server e ricevere una risposta.
setRequestHeader ("header_name", "value")- impostare i valori dell'intestazione della richiesta.
Proprietà oggetto XMLHttpRequest
onreadystatechangeè una delle proprietà più importanti dell'oggetto XMLHttpRequest. Con l'aiuto di questa proprietà, viene impostato un gestore, che viene chiamato ogni volta che cambia lo stato di un oggetto.
prontoStato- un numero che indica lo stato dell'oggetto.
testorisposta- presentazione della risposta del server sotto forma di testo normale (stringa).
responseXML- un oggetto documento conforme a DOM ricevuto dal server.
stato- lo stato della risposta dal server.
statusText- rappresentazione testuale dello stato della risposta dal server.
Dovresti dare un'occhiata più da vicino alla proprietà readyState:
- 0 - L'oggetto non è inizializzato.
- 1 - L'oggetto sta caricando i dati.
- 2 - L'oggetto ha caricato i suoi dati.
- 3 - L'oggetto non è completamente caricato, ma può interagire con l'utente.
- 4 - L'oggetto è completamente inizializzato; ricevuto una risposta dal server.
Creazione di un oggetto XMLHttpRequest
Come accennato in precedenza, la creazione di questo oggetto per ogni tipo di browser è un processo unico.
Ad esempio, per creare un oggetto nei browser compatibili con Gecko, Konqueror e Safari, dovresti usare la seguente espressione:
Richiesta Var = new XMLHttpRequest ();
E per Internet Explorer, viene utilizzato quanto segue:
Richiesta Var = nuovo oggetto ActiveX ("Microsoft.XMLHTTP");
Richiesta Var = nuovo ActiveXObject ("Msxml2.XMLHTTP");
Ora, per ottenere la compatibilità tra browser, è necessario aggiungere tutte le funzioni in una:
Funzione CreateRequest () (var Request = false; if (window.XMLHttpRequest) (// browser compatibili con Gecko, Safari, Konqueror Request = new XMLHttpRequest ();) else if (window.ActiveXObject) (// Internet explorer try (Request = new ActiveXObject ("Microsoft.XMLHTTP");) catch (CatchException) (Request = new ActiveXObject ("Msxml2.XMLHTTP");)) if (! Request) (alert ("Impossibile creare XMLHttpRequest");) return Request; )
Dopo tutto questo, puoi creare questo oggetto e non preoccuparti delle prestazioni sui browser più diffusi. Ma puoi creare un oggetto in posti diversi. Se lo crei globalmente, a un certo punto sarà possibile solo una richiesta al server. È possibile creare un oggetto ogni volta che c'è una richiesta al server (questo risolverà quasi completamente il problema).
Richiesta del server
L'algoritmo per la richiesta al server è simile a questo:
- Verifica dell'esistenza di XMLHttpRequest.
- Inizializzazione della connessione al server.
- Invio di una richiesta al server.
- Elaborazione dei dati ricevuti.
/* Funzione per inviare una richiesta a un file sul server r_method - tipo di richiesta: GET o POST r_path - percorso a un file r_args - argomenti della forma a = 1 & b = 2 & c = 3 ... r_handler - funzione che gestisce una risposta dal server * / function SendRequest (r_method , r_path, r_args, r_handler) (// Crea una richiesta var Request = CreateRequest (); // Verifica nuovamente l'esistenza della richiesta se (! Request) (return; ) // Assegna un gestore personalizzato Request.onreadystatechange = function () (// Se lo scambio di dati è completo if (Request.readyState == 4) (// Trasferisci il controllo al gestore utente r_handler (Request);)) // Verifica se è richiesta una richiesta GET if (r_method.toLowerCase() == "get" && r_args.length> 0) r_path + = "?" + r_args; // Inizializza la connessione Request.open (r_method, r_path, true); if (r_method.toLowerCase () == "post") (// If this is POST- request // Imposta Request.setRequestHeader ("Content-Type", "application / x-www-form-urlencoded; charset = utf -8"); // Invio m request Request.send (r_args); ) else (// Se questa è una richiesta GET // Invia una richiesta nulla Request.send (null);))
È diventato molto più facile creare una richiesta. Ad esempio, scriviamo una funzione che riceverà il contenuto di un file sul server e lo emetterà in un contenitore.
Function ReadFile (filename, container) (// Crea una funzione handler var Handler = function (Request) (document.getElementById (container) .innerHTML = Request.responseText;) // Invia una richiesta SendRequest ("GET", filename, " ", Gestore);)
Ecco come avviene l'interazione con il server.
Gestione della risposta
Nell'esempio precedente, abbiamo creato una funzione di richiesta del server. Ma di fatto non è sicuro, poiché non elaboriamo lo stato dell'oggetto e lo stato della risposta dal server.
Aggiorniamo il nostro codice in modo che possa visualizzare una notifica visiva sul processo di caricamento.
Request.onreadystatechange = function () (// Se lo scambio di dati è completo if (Request.readyState == 4) (// Trasferisci il controllo al gestore utente r_handler (Request);) else (// Notifica all'utente il caricamento)) ...
Come già sai, l'oggetto XMLHttpRequest ti consente di conoscere lo stato della risposta dal server. Cogliamo l'occasione.
Request.onreadystatechange = function () (// Se lo scambio dati è completo if (Request.readyState == 4) (if (Request.status == 200) (// Trasferisce il controllo al gestore utente r_handler (Request);) else (// Notifica all'utente l'errore)) else (// Notifica all'utente il download)) ...
Opzioni di risposta del server
Diversi tipi di dati possono essere ricevuti dal server:
- Testo normale
Jsonè la notazione dell'oggetto Javascript. Può essere usato per rappresentare un oggetto come una stringa (ecco un'analogia con una funzione di serializzazione). Quando ricevi dati JSON, devi eseguirli per ottenere un oggetto Javascript completo ed eseguire le operazioni necessarie su di esso. Si prega di essere consapevoli del fatto che tale trasmissione ed esecuzione di dati non è sicura. Devi tenere traccia di ciò che accade per l'esecuzione.
Codice JSON di esempio:
("data": ("misc": [("name": "JSON item uno", "type": "Subtitle 1"), ("name": "JSON item due", "type": " Sottotitolo 2 ")]))
Al ricevimento di tale codice, eseguiamo la seguente azione:
Var responsedata = eval ("(" + Request.responseText + ")")
Dopo aver eseguito questo codice, l'oggetto sarà disponibile per te dati di risposta.
Lavorare con linguaggi di programmazione lato server
Questo tipo di lavoro non è diverso dal solito. Ad esempio, prenderò PHP come linguaggio lato server. Nulla è cambiato sul lato client, ma il lato server è ora rappresentato da un file PHP.
Per tradizione iniziamo salutando il nostro meraviglioso mondo:
Echo "Ciao, mondo!";
Quando si accede a questo file, il client restituirà la stringa Hello, World. Come puoi immaginare, questo presenta le più ampie possibilità per la creazione di applicazioni. Passando argomenti quando si richiama il server utilizzando XMLHttpRequest, è possibile parametrizzare l'output, fornendo così funzionalità avanzate per l'applicazione Web.
Oltre a PHP, puoi utilizzare qualsiasi altro linguaggio di programmazione lato server.
AJAX - Che cos'è?
Quando le opportunità esistenti diventano poche e non c'è nessun posto dove migliorare quella esistente, si verifica una svolta tecnologica. Una tale svolta è AJAX (Asynchronous JavaScript and XML) - un approccio alla creazione di interfacce utente per applicazioni Web, in cui una pagina Web, senza ricaricare, carica i dati di cui l'utente ha bisogno. AJAX è uno dei componenti del concetto DHTML.
Cosa ci offre questa tecnologia? Attualmente lo sviluppo di applicazioni WEB tende a distinguere tra lato client e lato server, ed è per questo che si fa largo uso di template come Smarty e XSLT. Ora i progetti stanno diventando più complessi e l'intreccio di diverse tecnologie sta diventando troppo costoso per il tempo dello sviluppatore. Quindi, ad esempio, tutti gli stili di formattazione vengono eseguiti in file CSS o XSL, i dati HTML o XML sono archiviati in altre sezioni, gestori di server nella terza, database nella quarta. E se 5-6 anni fa quasi ovunque si vedeva l'intreccio di tutto questo in un unico file, ora sta diventando sempre più una rarità.
Quando si sviluppano progetti più complessi, è necessaria la strutturazione e la leggibilità del codice. Non dovresti sporcare il codice del programmatore con il codice del progettista del layout e il codice del progettista del layout con le modifiche del progettista e così via.
C'è bisogno di differenziare il lavoro. Quindi, ad esempio, il progettista farà il suo lavoro, il progettista di layout il suo, il programmatore il suo e nessuno interferirà l'uno con l'altro. Di conseguenza, ogni partecipante al progetto dovrà solo conoscere i dati con cui dovrà lavorare. In questo caso, la produttività del gruppo e la qualità del progetto aumentano notevolmente. Attualmente, questo problema viene risolto con successo utilizzando i modelli, ma questo crea anche alcune difficoltà, poiché per, ad esempio, collegare Smarty, è necessario collegare il modulo software di elaborazione dei modelli e collegarlo chiaramente alla struttura del progetto. E questo è tutt'altro che sempre possibile e richiede determinati costi. È un po' più semplice quando si utilizzano i bundle XML + XSL in quanto forniscono più opzioni, ma questa è un'alternativa, niente di più. Ma cosa succede se guardi verso qualcosa di radicalmente nuovo, che ti permetta di combinare tutto meglio, usando le possibilità di ciò che è? Prova a immaginare JavaScript, che ha tutte le funzionalità di PHP o Perl, inclusi grafica e database, che ha estensibilità e usabilità molto migliori ed è anche multipiattaforma.
Quindi cos'è esattamente AJAX? Di Ajax si è parlato per la prima volta dopo l'articolo del febbraio 2005 di Jesse James Garrett "A New Approach to Web Applications". Ajax non è una tecnologia a sé stante. Questa è un'idea basata su due principi fondamentali.
Utilizzo di DHTML per modificare dinamicamente il contenuto della pagina.
Utilizzo di XMLHttpRequest per accedere al server al volo.
L'utilizzo di questi due approcci consente di creare interfacce utente WEB molto più convenienti su quelle pagine di siti in cui è richiesta l'interazione attiva dell'utente. L'uso di Ajax è diventato più popolare dopo che Google ha iniziato a utilizzarlo attivamente nella creazione dei propri siti, come Gmail, Google Maps e Google Suggerisci. La creazione di questi siti ha confermato l'efficacia di questo approccio.
Quindi più in dettaglio: se prendi il modello classico di un'applicazione WEB:
Il cliente, digitando l'indirizzo della risorsa di suo interesse nella barra di ricerca, arriva al server e gli fa una richiesta. Il server esegue i calcoli in base alla richiesta, accede al database, e così via, dopodiché i dati ricevuti vanno al client e, se necessario, vengono sostituiti in modelli ed elaborati dal browser. Il risultato è la pagina che vediamo, e che l'80% della popolazione del paese nel WEB chiama Internet. Questo è un modello classico che è riuscito a mettersi alla prova e a guadagnarsi un posto d'onore al sole. Questo è il modello di interazione più semplice e, di conseguenza, il più diffuso. Tuttavia, sta diventando sempre più insufficiente. Immagina il gioco online "Sea Battle", che è giocato da due amici incalliti: un residente in Sudafrica e un residente in Giappone. Come puoi rendere il loro gioco il più divertente possibile utilizzando un modello del genere? In ogni caso, i dati delle navi affondate verranno conservati sul server, e per verificare se l'avversario non è di suo gradimento sarà necessario aggiornare ogni volta la pagina e aggiornare i dati obsoleti. "Ma la gente ha inventato la memorizzazione nella cache" - dici, e avrai assolutamente ragione, ma non lo rende affatto più facile. La memorizzazione nella cache accelererà solo il tempo di interazione del server, ma non eliminerà la necessità di ricaricare la pagina. In alternativa, puoi impostare un certo tempo di autoaggiornamento, ma in questo caso la pagina si ricaricherà completamente.
Ora diamo un'occhiata al modello di interazione AJAX:
La sequenza di azioni del cliente è preservata e lui, molto probabilmente, non capirà cosa accadrà e la parola AJAX sarà associata solo al nome della squadra di calcio. Ma le cose sembrano diverse sul lato server.
Quando si contatta il server, viene generata una pagina che verrà visualizzata all'utente e gli offrirà di eseguire la sequenza di azioni a cui è interessato. Con una scelta consapevole (sebbene non necessaria) di un client, la sua richiesta farà riferimento al modulo AJAX, che eseguirà tutti i calcoli di suo interesse e lavorerà con il server in quanto tale. Ma qual è l'innovazione? La differenza principale è che questo metodo ci consente di accedere dinamicamente al server ed eseguire le azioni di nostro interesse. Ad esempio, dobbiamo accedere al database e ottenere i dati che ci interessano, che poi utilizzeremo. Memorizzeremo i dati in un file XML che verrà generato dinamicamente, quindi:
Crea un nuovo oggetto JavaScript:
Var req = new ActiveXObject ("Microsoft.XMLHTTP"); (per IE) var req = new XMLHttpRequest (); (Per tutto il resto)
Quindi scriviamo una funzione usando questo oggetto
Var richiesta; funzione loadXMLDoc (url) (// branch per oggetto XMLHttpRequest nativo if (window.XMLHttpRequest) (req = new XMLHttpRequest (); req.onreadystatechange = processReqChange; req.open ("GET", url, true); req.send ( null); // branch per IE/Windows ActiveX version) else if (window.ActiveXObject) (req = new ActiveXObject ("Microsoft.XMLHTTP"); if (req) (req.onreadystatechange = processReqChange; req.open ("GET ", url, vero); req.send ();)))
Nel corpo del file HTML, scrivi uno script che:
Funzione checkName (input, response) (if (response! = "") (// Response mode message = document.getElementById ("nameCheckFailed"); if (response == "1") (message.className = "error"; ) else (message.className = "hidden";)) else (// Input mode url = "http: //localhost/xml/checkUserName.php? q =" \\ + input; loadXMLDoc (url);))
Nel file localhost / xml / checkUserName.php, elaboriamo i dati ricevuti dalla riga di comando in questo caso nella variabile q. E salviamo il risultato in una struttura XML, che memorizziamo nello stesso file. Quindi possiamo ricevere ed elaborare i dati ricevuti dal database, o qualsiasi altra cosa di cui abbiamo bisogno. Inoltre, il server elaborerà solo i dati che dobbiamo aggiornare e non l'intera pagina se viene ricaricata.
Ora torniamo ai nostri due amici - appassionati di combattimento navale: in vista della comparsa di questa innovazione, possiamo fare quanto segue: mettere un controllo ogni tre secondi del file XML, questo controllo implica il controllo del database per un nuovo record, che è, la mossa fatta dall'avversario. Se la mossa è stata fatta, la pagina affonda le navi senza ricaricare, rovinando così l'umore dei partecipanti alle battaglie sull'acqua. Questa funzionalità si ottiene con il semplice utilizzo di Javascript e fogli di stile. Questo esempio è abbastanza illustrativo, ma lungi dall'essere completo, l'applicazione di questa tecnologia è molto più significativa.
Tuttavia, non è tutto così semplice. Diamo ora un'occhiata ai tratti negativi.
In primo luogo, possiamo trasferire i dati solo utilizzando il metodo GET, quindi grandi quantità di dati dovranno essere lasciate sole. Questo problema è già stato sollevato più di una volta in varie fonti, ma signori, ci sono cookie che sono abbastanza accettabili in caso di trasferimento di dati di grandi dimensioni, che possono ospitare una richiesta GET e Javascript, a sua volta, ha funzioni per lavorare con essi.
Il secondo problema è la compatibilità tra browser. L'oggetto XMLHttpRequest non fa ancora parte di nessuno standard (sebbene qualcosa di simile sia già stato proposto nella specifica W3C DOM Level 3 Load and Save). Pertanto, esistono due metodi diversi per chiamare questo oggetto nel codice dello script. In Internet Explorer, un oggetto ActiveX viene richiamato in questo modo:
Var req = new ActiveXObject ("Microsoft.XMLHTTP");
In Mozilla e Safari, questo è più semplice (poiché è un oggetto incorporato in JavaScript):
Var req = new XMLHttpRequest ();
Tutti i browser moderni supportano questo oggetto e solo l'1,8% degli utenti (secondo le statistiche di SpyLog) che utilizzano versioni molto vecchie di browser che non supportano questo oggetto avranno problemi.
E infine, la sicurezza. Soffermiamoci su questo in modo più dettagliato. Il problema principale è che tutti i dati e il codice sorgente delle funzioni JavaScript possono essere visti visualizzando il codice sorgente della pagina; di conseguenza, un attaccante può tracciare la logica di esecuzione della richiesta e, in determinate circostanze, eseguire il set dei comandi di cui ha bisogno. Questo non gioca un ruolo speciale quando abbiamo un semplice confronto di dati, ma cosa fare in situazioni più complesse, ad esempio durante l'autorizzazione, e come, in questo caso, passare le password. Come accennato in precedenza, i cookie vengono in soccorso. I dati necessari possono essere inviati con il loro aiuto, nonché elaborati. Facciamo un esempio in cui un utente verrà autenticato utilizzando la tecnologia di cui tratta l'articolo.
Generando la pagina, formiamo valori univoci, che poi inseriamo nelle variabili del server. E nei Cookie del browser, quindi, previa autorizzazione, riceviamo il nome utente e la sua password, che dobbiamo trasferire al modulo di elaborazione sul server.
Dopo che l'utente ha inserito i dati e premuto il pulsante Invia, la sua password viene inserita in Cookie e il nome utente viene trasmesso apertamente, ad esempio con un collegamento http://www.mubestajax.com/ajax.php?login=pupkin durante la ricezione dei dati, il server verifica innanzitutto i dati ricevuti. Poiché i valori che abbiamo generato dall'inizio del lavoro del server e poi li abbiamo trasferiti alle variabili globali e ai cookie del server devono corrispondere, quando si verifica l'integrità dei dati trasmessi, se c'è una mancata corrispondenza, il programma smette di funzionare. Se tutto è andato bene, vengono estratti tutti i dati necessari e vengono eseguiti i calcoli e il lavoro necessari. Questo metodo di protezione è abbastanza semplice ed efficace. Ma per grandi progetti, non funzionerà.
Quando la sicurezza viene prima di tutto, è meglio utilizzare soluzioni più sofisticate e affidabili. Ma nella maggior parte dei casi, queste precauzioni saranno più che sufficienti, poiché l'utilizzo di moduli più complessi comporta l'utilizzo di tecnologie non sempre incluse nel software standard dei server moderni, la cui caratteristica principale è la semplicità. Ecco perché tecnologie come MySQL e PHP sono diventate molto diffuse, dal momento che forniscono facilità d'uso con il loro basso consumo di risorse e sufficiente affidabilità. E nell'ambito di questo software, la soluzione proposta sopra è la soluzione migliore.
In conclusione, vorrei dire che AJAX, da un lato, è un enorme passo avanti nell'ingegneria WEB, ma dall'altro è una fase di evoluzione attesa da tempo che ha aperto nuovi orizzonti nel campo dello sviluppo del software . Allo stesso tempo, questa tecnologia è ancora piuttosto "umida", poiché il suo utilizzo al momento è piuttosto una piacevole eccezione. Ma sono sicuro che tutti sentiranno parlare di lei più di una volta.
La maggior parte dei siti web moderni utilizza una tecnologia chiamata AJAX per interagire con il visitatore in modo rapido ed efficiente. AJAX è diventata una tecnica molto popolare per recuperare i dati da un server in background e aggiornare dinamicamente una pagina.
Lo sviluppo di codice JavaScript per implementare AJAX da zero è un processo molto noioso e noioso. Tuttavia, molte librerie JavaScript, tra cui jQuery, hanno eccellenti implementazioni AJAX di alto livello come un insieme di metodi e funzioni che rendono la creazione di siti Web più semplice e veloce.
In questa serie di tutorial, esamineremo le basi della creazione di richieste AJAX con jQuery. Verranno trattati i seguenti argomenti:
- Che cos'è la tecnologia AJAX? Come funziona? Quali sono i suoi vantaggi?
- Come posso effettuare diversi tipi di richieste AJAX utilizzando jQuery?
- Invio di dati al server tramite richieste AJAX.
- Elaborazione ed estrazione di dati dalle risposte AJAX dal server.
- Come posso personalizzare la gestione AJAX di jQuery e modificare le impostazioni predefinite?
Nota: le esercitazioni si concentrano sulla parte JavaScript lato client. Ma anche lo sviluppo lato server è piuttosto semplice. Per ulteriori informazioni, dovresti studiare i materiali sui linguaggi di programmazione lato server come PHP.
Che cos'è AJAX e in che modo è utile?
AJAX è una tecnica di sviluppo di applicazioni Web in cui il codice JavaScript in esecuzione nel browser di un visitatore comunica con un server Web in modo asincrono, ovvero in background. Le differenze rispetto alle applicazioni web convenzionali sono le seguenti:
- Pagina web normale contiene collegamenti o moduli che, se cliccati o inviati, generano una richiesta a un nuovo URL sul server web. Il server invia una pagina HTML completamente nuova, che viene quindi visualizzata dal browser, sostituendo la pagina originale. Questo approccio richiede tempo e ha un effetto negativo sul visitatore, poiché deve attendere il caricamento della nuova pagina.
- Quando si utilizza la tecnologia AJAX, Il codice JavaScript effettua una richiesta a un URL sul server. Il codice può anche inviare dati insieme alla richiesta. Il codice JavaScript quindi elabora la risposta del server e agisce di conseguenza. Ad esempio, è possibile eseguire calcoli con i dati restituiti, aggiungere o aggiornare un widget sulla pagina, inviare un messaggio al visitatore sull'aggiornamento del database sul server.
Poiché la richiesta AJAX viene eseguita in background, JavaScript (e il visitatore) possono continuare a interagire con la pagina durante l'elaborazione della richiesta. Il processo è nascosto al visitatore che non ha bisogno di lasciare la pagina che sta visualizzando in un dato momento. Questo approccio rende le pagine AJAX molto piacevoli con cui lavorare.
Il cuore di AJAX è l'oggetto JavaScript XMLHttpRequest. Fornisce una serie di metodi come open(), send() e onreadystatechange() che possono essere utilizzati quando si inviano richieste AJAX al server e si elaborano le risposte in background.
Lo sviluppo di codice AJAX JavaScript cross-browser può essere un processo noioso. Fortunatamente, jQuery ti offre alcuni metodi AJAX di facile utilizzo che astraggono molte operazioni di basso livello.
Per i più curiosi, la parola AJAX è l'abbreviazione delle prime lettere di un'espressione in inglese " UN sincrono J avaScript UN nd X ML "(JavaScript asincrono e XML.) Tuttavia, il termine può essere fuorviante: la richiesta non deve essere asincrona e non è necessario utilizzare XML per inviare i dati.
Effettuare una richiesta GET con $ .get ()
Il metodo jQuery $ .get() fornisce un modo semplice e conveniente per effettuare una semplice richiesta AJAX. Effettua la richiesta utilizzando il metodo HTTP GET (utilizzato per ottenere URL come pagine e immagini) invece del metodo POST (che viene tradizionalmente utilizzato per inviare i dati del modulo).
Nella sua forma più semplice, puoi chiamare un metodo come questo:
Dove url è l'URL della risorsa da cui è prevista una risposta. Di solito è uno script lato server che esegue alcune azioni e può restituire alcuni dati:
$ .get ("http://example.com/getForecast.php");
Sebbene sia possibile richiedere anche un documento statico:
$ .get ("http://esempio.com/miapagina.html");
Quando si richiede un URL, è possibile inviare i dati con la richiesta. Puoi passare i dati in una stringa di query, proprio come una normale richiesta GET:
$ .get ("http://example.com/getForecast.php?city=rome&date=20120318");
Sarebbe corretto fare lo stesso passando un oggetto dati come secondo parametro al metodo $ .get(). L'oggetto dati deve contenere informazioni sotto forma di coppie nome proprietà/valore proprietà. Ad esempio:
Var data = (città: "roma", data: "20120318"); $ .get ("http://example.com/getForecast.php", dati);
In alternativa, puoi passare i dati al metodo $ .get() come stringa:
Var data = "città = roma & data = 20120318"; $ .get ("http://example.com/getForecast.php", dati);
Riceviamo dati dal server
Finora, abbiamo esaminato esempi di utilizzo di $ .get() solo per inviare richieste al server, ignorando qualsiasi risposta che potrebbe generare uno script lato server. Ma nella maggior parte dei casi, il tuo codice JavaScript si aspetterà una risposta da uno script lato server ed elaborerà i dati ricevuti.
Una richiesta AJAX è asincrona, il che significa che viene eseguita in background mentre il resto del JavaScript continua a essere eseguito. Come, quindi, ottenere una risposta dal server una volta completata la richiesta?
devi scrivere funzione di ritorno che verrà eseguito automaticamente quando la richiesta AJAX viene completata e il server invia una risposta. Come minimo, la tua funzione dovrebbe accettare i dati restituiti dal server come primo argomento:
Funzione myCallback (returnedData) (// Elabora i dati restituiti)
Una volta creata la funzione di callback, puoi passarla come terzo argomento al metodo $ .get():
Var data = (città: "roma", data: "20120318"); $ .get ("http://example.com/getForecast.php", data, myCallback);
Determinazione del tipo di dati della risposta
In genere, il lato server trasferisce i dati in uno dei numerosi formati comuni, inclusi XML, JSON, JavaScript o HTML. Per impostazione predefinita, jQuery cerca di determinare il formato più appropriato e di analizzare i dati di conseguenza. Ma è meglio definire esplicitamente il formato.
Per specificare il formato, passare il quarto argomento al metodo $ .get(). Questo argomento può essere una stringa dal seguente elenco:
- "xml"
- "json"
- "sceneggiatura"
- "html"
Ad esempio, se sai che lo script del server restituisce dati in formato JSON, chiama il metodo $ .get() come segue:
$ .get ("http://example.com/getForecast.php", data, myCallback, "json");
Un esempio di utilizzo del metodo $ .get()
Ecco un esempio di creazione di una richiesta AJAX utilizzando il metodo $ .get() e la semplice gestione della risposta. Affinché l'esempio funzioni, è necessario creare un semplice file di testo sul server denominato getForecast.txt contenente il seguente testo:
("città": "Vasyuki", "data": "18 marzo 2012", "previsione": "Freddo da brivido e fango", "maxTemp": +1)
Questo file simulerà una risposta JSON che potrebbe essere stata generata da uno script di previsioni del tempo sul server.
Quindi creiamo la pagina showForecast.html nella stessa cartella di getForecast.txt: