Interazione con i web services in Titanium
L’SDK di Titanium Appcelerator mette a disposizione la classe client HTTP che implementa le specifiche XMLHttpRequest. Titanium.Network.HTTPClient, questo il suo nome, è in grado di effettuare richieste HTTP sia sincrone che asincrone.
La struttura di una richiesta HTTP, effettuato con HTTPClient, è la seguente:
// url di un servizio di esempio var url = “http://mywebservice/test.asmx”;
//1) creazione dell’oggetto var client = Ti.Network.createHTTPClient({
// callback chiamata quando abbiamo dei dati di risposta onload : function(e) {
/* callback */},
// callback chiamata quando c’è un errore
onerror : function(e) {/* callback*/
},
});
// 2) definizione della richiesta
client.open(“GET”, url);
// 3) invio della richiesta
client.send();
Durante la creazione dell’oggetto HTTPClient è necessario definire le funzioni di callback onload e onerror, necessarie per gestire sia la ricezione dei dati che la notifica di un errore. Il client è in grado di gestire anche altri eventi, per esempio il progresso dell’upload e del download di file o il cambio di stato, e per ognuno di questi eventi deve essere definita una callback apposita da assegnare, rispettivamente, alle proprietà onsendstream, ondatastream e onreadystatechange.Non essendo un oggetto dell’interfaccia utente, HTTPClient non ha una sua sintassi XML da definire nella view.
Alloy fornisce una struttura dati per memorizzare variabili globali, cioè accessibili in qualunque parte del codice senza dover dichiarare o importare moduli. Questa struttura si chiama Alloy.Globals, che come il nome lascia intendere è accessibile globalmente in tutto il progetto ed è ideale per memorizzare variabili e funzioni globali.
Il file dove andremo a definire la variabile globale Alloy.Globals.url è app/alloy.js, perchè il suo contenuto sarà eseguito prima di qualsiasi altro controller, e questo lo rende il punto migliore in cui inizializzare gli oggetti globali.
Alloy.Globals.url = “http://mywebservice/test.asmx”;
var client = Ti.Network.createHTTPClient({onload : function(e) {
var json = JSON.parse(this.responseText);
onSuccess(json);
},onerror : function(e) {
Ti.API.debug(e.error);
alert(‘error ‘ + JSON.stringify(e.error));
},
timeout : 5000 // in milliseconds});