Come usare la funzione ajax di jQuery

Avendo seguito i precedenti tre tutorial, avresti dovuto acquisire una buona conoscenza di AJAX. In questo tutorial finale, completeremo le cose lavorando con un esempio più complesso.

Il markup

Per avere un'idea della struttura di questo esempio, considera il seguente markup:

 

Il markup per il principale l'elemento è mostrato di seguito:

 

Strutture di front-end popolari

Fare clic su ognuno per caricare i dettagli tramite AJAX.

Bootstrap Foundation UIkit Semantic UI Skeleton Material Design Lite

Notare i collegamenti testuali. Questi corrispondono a diversi framework front-end. Come vedremo nella prossima sezione, ogni volta che clicchiamo sui link, verrà eseguita una richiesta AJAX. Quindi, l'elemento con la classe di modale apparirà e il suo contenuto verrà aggiornato con i dati recuperati dalla risposta.

Ecco come principale l'aspetto è simile a:

Marcatura modale

Il prossimo passo è esaminare la struttura del nostro modal. Ecco il codice HTML:

 
  • Struttura
  • Versione corrente
  • Numero di stelle Github
  • Pagina ufficiale

Come puoi vedere, il modale contiene alcuni elementi vuoti. Li inseriamo nell'HTML perché il loro testo cambierà a seconda del link su cui clicchiamo e della risposta che recupereremo.

L'immagine sotto mostra come appare inizialmente il modale:

Per impostazione predefinita, la modale è nascosta. Inoltre, nascondiamo anche il caricatore. Questo apparirà solo quando viene attivata la richiesta AJAX.

Dai un'occhiata alle corrispondenti regole CSS:

 .modal opacity: 0;  .loader display: none;  

Nota che usiamo il opacità proprietà (e non il display proprietà) per nascondere il modale perché questa proprietà appartiene alle proprietà CSS animabili. In questo modo, saremo in grado di passare gli stati del modale (vale a dire gli stati aperto e chiuso).

Generazione della risposta JSON

Per gli scopi di questo esempio, sceglieremo di costruire noi stessi la risposta JSON. Specificamente, la risposta attesa (cioè il Demo.json file) sarà una matrice di oggetti. Ogni oggetto conterrà dettagli riguardanti i relativi framework front-end.

Inoltre, il valore del nome proprietà corrisponderà ai collegamenti testuali del principale elemento (vedi la sezione precedente). Con questo in mente, la struttura della risposta assomiglia a questo:

 ["url": "http://getbootstrap.com/", "numberOfStars": "88.260+", "currentVersion": "3.3.5", "nome": "Bootstrap", "url": "http://foundation.zurb.com/", "numberOfStars": "21.180+", "currentVersion": "5.5.3", "name": "Foundation", // 4 altri oggetti qui] 

Nota: i valori che abbiamo usato per il numberOfStars e Versione corrente le proprietà sono false e puramente ai fini della dimostrazione.

Simile agli esempi precedenti di questa serie, useremo AJAX per richiedere un file statico. Tuttavia, se vogliamo incorporare contenuti provenienti da altri siti (ad esempio Google Maps, Flickr), dovremmo leggere la loro documentazione API e, se necessario, richiedere una chiave API.

Inoltre, i nostri dati di destinazione risiedono sullo stesso server della pagina demo. Pertanto, eviteremo limitazioni che potrebbero verificarsi quando si interagisce con servizi di terze parti (vedere la sezione "Limitazioni delle richieste AJAX" del primo tutorial).

Implementazione della richiesta AJAX

In questa sezione, useremo jQuery ajax funzione per inizializzare una richiesta AJAX. Prima di procedere, definiamo innanzitutto le nostre variabili memorizzando nella cache i selettori jQuery più comunemente utilizzati:

 var $ list = $ ('. m-info'), var $ message = $ ('. m-message'); var $ modal = $ ('. modal'); var $ loader = $ ('. loader'); var $ framework; 

Ora è il momento di esaminare il codice responsabile dell'esecuzione della richiesta:

 $ ('. boxes a'). on ('click', function (e) e.preventDefault (); $ framework = $ (this) .text (); $ .ajax (url: 'Demo.json' , dataType: 'json', beforeSend: function () $ loader.show ();). done (successFunction) .fail (errorFunction) .always (alwaysFunction);); 

Noterai la sintassi per il ajax la funzione ha il seguente aspetto:

 $ .Ajax ([Impostazioni]) 

Il impostazioni parametro è un oggetto di configurazione che contiene informazioni sulla nostra richiesta. Il numero delle proprietà che questo oggetto può avere è molto lungo (circa 34 proprietà). Per semplicità, discuteremo solo di quelli usati in questa demo. Più specificamente:

Proprietà Descrizione
url Una stringa contenente l'URL a cui viene inviata la richiesta.
tipo di dati Il formato dei dati di risposta (ad es. jSON, xml, html).
beforeSend Una funzione di callback che viene eseguita prima di inviare la richiesta. Qui, questa funzione attiva il codice che mostra il loader.

Prima di andare avanti, vale la pena menzionare tre cose:

  • C'è anche un'altra sintassi per il ajax funzione: $ .ajax (url [, impostazioni])
  • Tutte le proprietà di configurazione di impostazioni parametro sono opzionali.
  • Il metodo HTTP predefinito è OTTENERE.

Metodi promettenti

Il ajax la funzione restituisce l'oggetto jQuery XMLHttpRequest o jqXHR. Questo oggetto implementa l'interfaccia Promise e quindi contiene tutte le proprietà, i metodi e il comportamento di una Promessa.

In questo esempio, utilizziamo i seguenti metodi Promise:

  • fatto
  • fallire
  • sempre

Il fatto il metodo viene attivato se la richiesta ha esito positivo. Riceve uno o più argomenti, ognuno dei quali può essere una singola funzione o una serie di funzioni. Ad esempio, nella nostra demo, il successFunction () viene passato come argomento.

La funzione di callback (ad es. successFunction ()) accetta tre argomenti. Innanzitutto, i dati restituiti. Secondo, una stringa che classifica lo stato della richiesta (vedi l'articolo precedente per i suoi possibili valori). Infine, l'oggetto jqXHR.

Il fallire il metodo viene chiamato se la richiesta non riesce. Riceve uno o più argomenti, ognuno dei quali può essere una singola funzione o una serie di funzioni. Ad esempio, nella nostra demo, il funzione degli errori () viene passato come argomento.

La funzione di callback (ad es. funzione degli errori ()) accetta tre argomenti: l'oggetto jqXHR, una stringa che classifica lo stato della richiesta e un'altra stringa che specifica l'errore risultante. Questo errore riceve la parte testuale dello stato HTTP, ad esempio Non trovato o Proibito.

Il sempre il metodo viene eseguito al termine della richiesta, indipendentemente dal successo (ad es fatto metodo è eseguito) o fallimento (cioè il fallire metodo è eseguito) di esso. Di nuovo, riceve come argomento una singola funzione o una serie di funzioni. Ad esempio, nella nostra demo, il alwaysFunction () viene passato come argomento.

Lo stato della richiesta specifica gli argomenti della funzione. In caso di richiesta riuscita, il callback (ad es. alwaysFunction ()) riceve gli stessi argomenti della richiamata del fatto metodo. Al contrario, se la richiesta non riesce, accetta gli stessi argomenti della richiamata del fallire metodo.

Nota: Invece del fatto, fallire, e sempre Prometti i metodi che sono usati in questo esempio, potremmo anche aver usato il successo, errore, e completare funzioni di callback. Queste funzioni sono definite nel impostazioni parametro.

Visualizzazione dei dati

Se la richiesta ha esito positivo, siamo in grado di recuperare i dati di risposta. Quindi, lo manipoliamo in modo da popolare gli elementi vuoti del modale.

Considera il codice per il successFunction richiama:

 function successFunction (data) if (data.length> 0) for (var i = 0; i < data.length; i++)  if ($framework === data[i].name)  $list.show(); $message.hide(); $list.find('li:nth-of-type(2)').text($framework); $list.find('li:nth-of-type(4)').text(data[i].currentVersion); $list.find('li:nth-of-type(6)').text(data[i].numberOfStars); $list.find('li:nth-of-type(8)').html('' + data[i].url + ''); break;  else  $list.hide(); $message.show().text('No data received for this framework!');    else  $list.hide(); $message.text('No data received from your respose!');   

Sebbene abbiamo aggiornato il contenuto del nostro modal, questo è ancora nascosto. Diventa visibile e il caricatore scompare al termine della richiesta. Solo allora, il alwaysFunction la richiamata è eseguita:

 function alwaysFunction () $ loader.hide (); $ Modal.addClass ( 'attivo');  

Il attivo la classe si presenta così:

 .attivo opacità: 1; z-index: 10; transform: scale (1);  

Sotto puoi vedere l'aspetto atteso del modale se clicchiamo su bootstrap link di testo:

Un paio di scenari

È importante comprendere il codice che viene eseguito in determinate circostanze. Esaminiamo due scenari comuni:

  • Il valore del nome proprietà non corrisponde ai collegamenti testuali del principale elemento. Ad esempio, supponiamo di definire un URL in cui il valore di nome proprietà dell'oggetto correlato al framework Foundation Foundation2 invece di Fondazione. In tal caso, se clicchiamo su Fondazione link di testo, apparirà la seguente modal:
  • I dati di risposta sono vuoti. Diciamo, per esempio, che definiamo un URL che punta a un array vuoto. In questo caso, il modale sarebbe simile a questo:

Gestione degli errori

Quindi, abbiamo coperto il codice che viene generato quando la richiesta ha esito positivo. Ma cosa succede se la richiesta fallisce? Nel caso di una richiesta non riuscita, nascondiamo la lista e mostriamo un messaggio personalizzato.

Ecco il codice del failFunction () che dimostra questo comportamento:

 function failFunction (request, textStatus, errorThrown) $ list.hide (); $ message.text ('Si è verificato un errore durante la richiesta:' + request.status + "+ textStatus +" + errorThrown);  

Per familiarizzare con questo codice, specifichiamo un URL che non esiste. Quindi il fallire il metodo verrà attivato e verrà mostrato il seguente modale:

Nota: Anche in questo caso, il messaggio di errore potrebbe essere diverso se si esegue questo esempio localmente.

Ecco la demo di Codepen integrata:

Conclusione

In questo tutorial abbiamo concluso l'esame di AJAX dal punto di vista di un web designer, ben fatto per seguirlo! Spero che abbiate trovato utile questa serie e che abbiate appreso alcune nuove competenze.

Come passo successivo, ti incoraggio ad esaminare le seguenti cose:

  • Acquisisci familiarità con i metodi abbreviati AJAX di jQuery che non abbiamo trattato (ad es. $ GetJSON metodo).
  • Implementa le tue richieste AJAX accedendo a file statici o persino a dati dinamici provenienti da servizi di terze parti (ad esempio Flickr).