Keywords: oggetti in json, richieste AJAX, API
jQuery è una libreria JavaScript leggera e facile da usare che semplifica la manipolazione del DOM (Document Object Model) e la gestione degli eventi nel browser. jQuery fornisce un'API concisa e intuitiva che semplifica il lavoro con JavaScript e rende possibile scrivere codice più compatto e leggibile.
$(document).ready(function() {
$('#elemento').hide();
});
$('elemento');//per tag
$('#elemento');//per ID
$('.elemento');//per classe
$('#elemento').css('background-color', '#F00');
$('#elemento').text('Nuovo testo');
$('#elemento').html('Nuovo contenuto HTML
');
$('#elemento').addClass('classe1');
$('#elemento').click(function() {
alert('Hai cliccato su elemento!');
});
jQuery offre anche modi più semplici per effettuare richieste asincrone:
$.ajax({
url: 'https://esempio.com/api/dati',
dataType: 'json',
success: function(data) {
console.log(data);
},
error: function() {
console.log('Errore nella richiesta AJAX');
}
});
Una volta che i dati sono stati ottenuti, è possibile utilizzare le funzioni jQuery per manipolare il DOM e visualizzare i dati nella pagina web. Ad esempio, per visualizzare i dati ottenuti in una tabella HTML, si può utilizzare il seguente codice:
$.ajax({
url: 'https://esempio.com/api/dati',
dataType: 'json',
success: function(data) {
var table = $('<table>');
var headerRow = $('<tr>').appendTo(table);
$('<th>').text('ID').appendTo(headerRow);
$('<th>').text('Nome').appendTo(headerRow);
$('<th>').text('Email').appendTo(headerRow);
$.each(data, function(index, item) {
var row = $('<tr>').appendTo(table);
$('<td>').text(item.id).appendTo(row);
$('<td>').text(item.nome).appendTo(row);
$('<td>').text(item.email).appendTo(row);
});
$('#tabella-dati').append(table);
},
error: function() {
console.log('Errore nella richiesta AJAX');
}
});
$.getJSON() è un metodo specifico di jQuery per effettuare richieste AJAX che prevedono il formato di risposta JSON. Questo metodo semplifica la sintassi di $.ajax() e $.get() e consente di ottenere facilmente i dati in formato JSON dal server. Questo metodo è ideale per le richieste AJAX che prevedono dati strutturati in formato JSON.
$.getJSON('https://esempio.com/api/dati', function(data) {
console.log(data);
});
Oltre ad Ajax, ripassiamo le richieste usando fetch col più moderno sistema delle promesse.
fetch('https://esempio.com/api/dati')
.then(response => response.json()) //la risposta converte il testo in arrivo in json
.then(data => console.log(data)) //il json viene stampato
.catch(error => console.error(error));
Il primo then risolve la promessa e la forma in json; questo json viene poi contenuto nella variabile data, che viene stampata. Nel caso opposto di un errore invece, l'errore viene stampato.
Le funzioni JS async-await sono basate sul sistema delle promesse.
async function getData() {
try {
const response = await fetch('https://esempio.com/api/dati');
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
}
La funzione async-await è una funzione asincrona che restituisce una promessa. Il try-catch è un sistema per gestire gli errori. La funzione fetch restituisce una promessa, che viene risolta con la risposta del server. La risposta viene convertita in json e contenuta nella variabile data, che viene stampata. Nel caso opposto di un errore invece, l'errore viene stampato.
La differenza sostanziale sta nella sintassi: async e await dividono la richiesta dall'attesa della risposta.
Per approfondire:
const promise1 = fetch('https://example.com/data1');
const promise2 = fetch('https://example.com/data2');
Promise.all([promise1, promise2])
.then(arrayDiRisultati => {
const risultato1 = arrayDiRisultati[0];
const risultato2 = arrayDiRisultati[1];
// codice da eseguire dopo la risoluzione di tutte le promesse
})
.catch(errore => {
// codice da eseguire in caso di errore
});
Di più sull'event loop e su come funziona JS dietro le quinte, consigliamo: spiegazione da JSConf e Jake Archibald.
Le Open REST API sono interfacce web che consentono ad applicazioni di terze parti di accedere e utilizzare i dati o i servizi di un'altra applicazione o servizio web. Gli URL delle Open REST API seguono un formato standard e specifico che definisce la struttura delle richieste e delle risposte.
Solitamente, gli URL delle Open REST API includono tre parti principali:
Esempio:
https://api.example.com/v1/users?sort=asc&limit=10&access_token=abcdefg1234567
Le API possono essere utilizzate in migliaia di maniere diverse: un modo molto comune è per ottenere servizi che non si limitano semplicemente a fare query di un DB.
Scaricate qui il materiale necessario: file zip
Creiamo una semplice pagina web che visualizza i dati meteo di una città usando Open Weather. Crea una nuova cartella, all'inizio un file index.js dove poter fare la nostra richiesta.
Creiamo un profilo su openweathermap. Nella sezione API, creiamo una chiave e leggiamo la documentazione.
Usiamo la chiave per fare una richiesta fetch o AJAX a current weather data per una città a nostra scelta.
La richiesta deve essere di questo tipo:
const apiKey = "la-tua-chiave";
const city = "Milano";
const apiUrl = `https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${apiKey}`;
fetch(apiUrl)
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error));
Esplora l'oggetto che risulta dalla richiesta e vedi da cosa è costituito.
Usa un'estensione e.g. JSON formatter di Chrome per visualizzarlo in maniera più leggibile.
Nella stessa cartella creiamo un file index.html e cerchiamo di mostrare all'interno di quest'ultima il risultato della chiamata.
© Andrea Schimmenti & Fabio Vitali. TW 2022-2023.