Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Il servizio $http

Effettuare chiamate Ajax al server e gestire le risposte in maniera semplificata grazie a $http, un servizio predefinito che espone i classici metodi HTTP
Effettuare chiamate Ajax al server e gestire le risposte in maniera semplificata grazie a $http, un servizio predefinito che espone i classici metodi HTTP
Link copiato negli appunti

AngularJS dispone di diversi servizi predefiniti utilizzabili nelle nostre applicazioni. Tra questi uno dei più utilizzati, soprattutto in un contesto di Single Page Application, è il servizio $http.

Questo servizio consente di effettuare chiamate Ajax al server e di gestire le risposte in maniera molto semplice. Esso mette a disposizione un oggetto che fornisce i metodi per invocare i corrispondenti metodi HTTP:

$http.get(url)
$http.post(url, dati)
$http.put(url, dati)
$http.delete(url)
$http.head(url)

Come possiamo notare, i metodi post e put prevedono un secondo parametro che rappresenta i dati da inviare al server. Se il parametro dati è un oggetto JavaScript, esso viene automaticamente serializzato in JSON.

I metodi del servizio $http restituiscono delle promise, cioè degli oggetti che consentono di gestire in maniera strutturata l'esito di chiamate asincrone.

Le promise restituite dai metodi di $http mettono a disposizione i metodi:

Metodo Descrizione
success() consente di gestire la risposta del server in caso di esito positivo
error() per gestire situazioni di errore

Vediamo con un esempio come poter utilizzare il servizio $http all'interno di un controller e sfruttare i metodi della promise restituita:

angular.module("myApp")
	.controller("elencoController", function($scope, $http) {
		$http.get("/elencoCitta")
			.success(function(data) {
				$scope.elencoCitta = data;
			})
			.error(function() {
				alert("Si è verificato un errore!");
			});
	});

Questo controller carica l'elenco delle città da visualizzare effettuando una chiamata al server. In questo caso ricorriamo al servizio $http definendone la dipendenza nei parametri del metodo controller(). Quindi utilizziamo il metodo get() specificando l'URL relativo sul server e concateniamo le chiamate a success() ed error() per gestire l'esito della richiesta.

In caso di successo, i dati restituiti dal server vengono associati alla variabile di scope elencoCitta.

Per un esempio di utilizzo del metodo post() di $http, rivediamo l'implementazione del controller cittaController che aggiunge una città all'elenco:

angular.module("myApp")
	.controller("cittaController", function($scope, $http) {
		$scope.aggiungiCitta = function() {
			$http.post("/elencoCitta", {nome: $scope.nome, regione: $scope.regione})
				.success(function() {
					alert("Città aggiunta correttamente!");
				})
				.error(function() {
					alert("Si è verificato un errore!");
				});
		};
	});

Possiamo vedere anche in questo caso come l'uso del metodo post() sia abbastanza intuitivo. Il secondo parametro del metodo costruisce l'oggetto da inviare al server in base all'input dell'utente associato alle variabili di scope nome e regione.

Tutti i metodi del servizio $http corrispondenti ai metodi HTTP prevedono un ulteriore parametro opzionale che consente di specificare eventuali configurazioni aggiuntive per la richiesta da inviare al server. Questo parametro prevede un oggetto con le seguenti possibili proprietà:

Proprietà Descrizione
method Stringa che rappresenta il metodo HTTP da utilizzare nella richiesta. In realtà questo valore è implicitamente impostato dal metodo invocato, quindi raramente questa impostazione viene utilizzata
url URL su cui invocare il metodo. Anche in questo caso questa impostazione raramente viene utilizzata dal momento che l'URL viene passata come parametro del metodo invocato
params Oggetto JavaScript che rappresenta eventuali parametri da aggiungere in coda all'URL
headers Oggetto JavaScript che rappresenta gli header HTTP da inviare al server con la richiesta
timeout Tempo massimo di attesa di una risposta da parte del server espresso in millisecondi
transformRequest Funzione che può trasformare la richiesta prima di inviarla al server
transformResponse Funzione che può trasformare la risposta prima di passarla all'applicazione

Il seguente esempio mostra come specificare un timeout e l'header della Basic Authentication ad una richiesta HTTP:

$http.get("/elencoCitta",
	      { timeout: 30000,
		    headers: {
				"Authorization": "Basic bm9tZXV0ZW50ZTpwYXNzd29yZA=="}
          });

Abbiamo visto come il metodo success() delle promise restituite da get() e post() di $http ci fornisce, tramite il parametro data, i dati inviati dal server.

In realtà, sia il metodo success() che il metodo error() forniscono informazioni sull'esito delle richieste tramite quattro parametri:

Parametro Descrizione
data Rappresenta i dati restituiti dal server alla richiesta effettuata dalla nostra applicazione
status È il codice di stato HTTP inviato dal server
headers Rappresenta gli header HTTP inviati dal server con la risposta
config Rappresenta la configurazione HTTP utilizzata per effettuare la chiamata, cioè il parametro opzionale impostato implicitamente o esplicitamente nella chiamata del metodo di $http

Sfruttando questi parametri possiamo analizzare in dettaglio la risposta del server e fornire un feedback adeguato all'utente in caso di errore.

Ti consigliamo anche