3 pagine in totale: <<Indietro 1 [2] 3 Avanti >>
Il callback viene impostato attraverso la proprietà onreadystatechange e successivamente viene effettuata la richiesta al server tramite il metodo send. Molto importante è il parametro passato in input al metodo. A differenza delle richieste GET, quelle POST non utilizzano la sintassi che prevede il passaggio di parametri nell'url, ma il passaggio di parametri al momento della chiamata. Il parametro è una stringa che deve essere formattata nella stessa maniera in cui si formattano i parametri nell'url con la differenza che non deve comprendere l'indirizzo della pagina. Esempio: “Param1=a&Param2=b”. Trattandosi di un POST, lato server questi parametri sono recuperabili tramite la sintassi Request.Form[“NOMEPARAMETRO”].
Il metodo ReadyStateChange è il callback che controlla lo stato della richiesta e gestisce il risultato di ritorno. Se la proprietà readyState è 4, ovvero richiesta completata, allora si controlla il codice http di ritorno (0 e 200 indicano operazione completata con successo); se tutto è ok, allora si recupera il testo tornato dal server tramite la proprietà responseText. In caso di errore del server, viene visualizzato un messaggio di errore mentre, se lo stato della richiesta non è 4, si ignora il resto del codice e il callback verrà invocato al successivo polling dell'XMLHttpRequest.
Il codice visto fin qui non è molto generico, per sfruttare al meglio XMLHttpRequet la cosa ideale è costruire una classe wrapper che permetta di invocare operazioni sul server e di spedire il controllo ad un callback definito all'esterno sia in caso di errore che in caso di successo. Inoltre questa classe deve accettare anche altri parametri come il tipo di richiesta, l'url, il ContentType e altro. Nel codice seguente viene illustrata una classe che serve proprio questo scopo.
var net = new Object();
net.READY_STATE_UNINITIALIZED = 0;
net.READY_STATE_LOADING = 1;
net.READY_STATE_LOADED = 2;
net.READY_STATE_INTERACTIVE = 3;
net.READY_STATE_COMPLETE = 4;
net.XMLHTTPRequestWrapper = function(onload, onerror) {
this.req = null;
this.onload = (onload) ? onload : this.defaultLoad;
this.onerror = (onerror) ? onerror : this.defaultError;
}
net.XMLHTTPRequestWrapper.prototype.loadData = function(url, method, params, contentType) {
if (!method) {
method="GET";
}
if (!contentType && method == "POST") {
contentType = 'application/x-www-form-urlencoded';
}
if (window.XMLHttpRequest) {
this.req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
this.req = new ActiveXObject("Microsoft.XMLHTTP");
}
if (this.req) {
try {
var loader = this;
this.req.onreadystatechange = function() {
net.XMLHTTPRequestWrapper.onReadyState.call(loader);
}
this.req.open(method, url, true);
if (contentType) {
this.req.setRequestHeader('Content-Type', contentType);
}
this.req.send(params);
}
catch (err) {
this.onerror.call(this);
}
}
}
net.XMLHTTPRequestWrapper.onReadyState = function() {
var req = this.req;
if (req.readyState == net.READY_STATE_COMPLETE) {
if (req.status == 200 || req.status == 0) {
this.onload.call(this);
}
else {
this.onerror.call(this);
}
}
}
net.XMLHTTPRequestWrapper.prototype.defaultError = function() {
alert("error fetching data!"
+"\n\nreadyState:" + this.req.readyState
+"\nstatus: " + this.req.status
+"\nheaders: " + this.req.getAllResponseHeaders());
}
net.XMLHTTPRequestWrapper.prototype.defaultLoad = function() {
alert("Server Procedure Correctly Executed!"
+"\n\nresponseText:" + this.req.responseText
+"\nresponseXML: " + this.req.responseXML);
Questa classe viene istanziata prendendo due parametri in input: il callback per gestire il ritorno delle operazioni terminate correttamente, ed il callback per gestire quelle che generano un errore. L'unico metodo che viene esposto è loadData che accetta i parametri relativi ad una richiesta come l'indirizzo della pagina da richiamare, il metodo, i parametri (in caso di POST) ed il ContentType.
3 pagine in totale: <<Indietro 1 [2] 3 Avanti >>
Contenuti dell'articolo
- Galleria fotografica dinamica con ASP.NET AJAX
- Usare Search come un servizio nei tuoi siti e nei tuoi client
- Mappe nel tuo sito con Virtual Earth
- Integrare Windows Live ID, Contacts e Presence API nelle tue applicazioni
- Introduzione ai cloud based service con Windows Live Services
- Realizzare un custom extender AJAX con ASP.NET 3.5
- Tracciare le modifiche ai dati e allineare i datawarehouse con il Change Data Capture in SQL Server 2008
- Le nuove caratteristiche di IIS 7.0 per sviluppatori e sistemisti
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.






Difficoltà
Utilità
Stampa
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!