Sorgente PHP: examples/ajax/request.php
Sorgente XML: examples/ajax/request.xml
RICHIESTA DATI
Le richieste per la restituzione dati da parte del server prevedono che il server invii il risultato di uno o più datasource presenti nella pagina. I parametri standard da passare in una richiesta AJAX sono:
- data: Indicare il tipo di azione da eseguire
- dsobjname: id dell'oggetto ds da utilizzare
- dswhere(opzionale): Imposta un filtro su tutti i ds
- iddswhere(opzionale): Imposta un filtro esclusivo sul ds chiamato idds(per un ds chiamato "prova" la variabile sarà "provawhere")
E' possibile accodare ulteriori parametri rispettando la sintassi ¶metro=valore
Alcuni esempi di richieste possibili sono:
Richiesta di un singolo datasource presente nella pagina
Richiesta di un più datasource presente nella pagina
Richiesta di tutti i datasource presenti nella pagina
FILTRO PER SINGOLA TRANSAZIONE
Richiesta di un singolo datasource presente nella pagina con filtro
FILTRO PERMANENTE
Qualora si voglia effettuare una richiesta in maniera tale da mantere un filtro permanente nel datasource si dovrà:
AJAX.dsmore(dsObj, 'data=load&dsobjname=ds1');
Richiesta trasparente (non visualizza il loader):
AJAX.request(....);
AJAX.hideloader = false;
RISPOSTA DEL SERVER
I dati forniti dal server in risposta alla richiesta da parte del client sono in un formato standard XML, il vantaggio è quello di poter restituire nella stessa transazione: dati in formato JSON, dati in formato XML ed istruzioni javascript. Per ogni datasource tramite l'attributo out=xml o out=json è possibile ottenere rispettivamente il formato XML ed il formato JSON. Un esempio di output XML generato dal server è il seguente:
<data>
<ds1 start="0" end="5" limit="5" tot="8109" action="/jamp/examples/ajax/ds_load.php" order="">
<row>
<ID>1</ID>
<DENOMINAZIONE_COMUNE>AGRIGENTO</DENOMINAZIONE_COMUNE>
<CAB>16601</CAB>
</row>
<row>
<ID>2</ID>
<DENOMINAZIONE_COMUNE>ALESSANDRIA DELLA ROCCA</DENOMINAZIONE_COMUNE>
<CAB>82790</CAB>
</row>
<row>
<ID>3</ID>
<DENOMINAZIONE_COMUNE>ARAGONA</DENOMINAZIONE_COMUNE>
<CAB>828004</CAB>
</row>
<row>
<ID>4</ID>
<DENOMINAZIONE_COMUNE>BIVONA</DENOMINAZIONE_COMUNE>
<CAB>828103</CAB>
</row>
<row>
<ID>5</ID>
<DENOMINAZIONE_COMUNE>BURGIO</DENOMINAZIONE_COMUNE>
<CAB>828202</CAB>
</row>
</ds1>
<script>
<![CDATA[
$('ds2').DSresult = [
{ID:"1",DENOMINAZIONE_COMUNE:"AGRIGENTO",CAB:"16601"},
{ID:"2",DENOMINAZIONE_COMUNE:"ALESSANDRIA DELLA ROCCA",CAB:"82790"},
{ID:"3",DENOMINAZIONE_COMUNE:"ARAGONA",CAB:"828004"},
{ID:"4",DENOMINAZIONE_COMUNE:"BIVONA",CAB:"828103"},
{ID:"5",DENOMINAZIONE_COMUNE:"BURGIO",CAB:"828202"},
{ID:"6",DENOMINAZIONE_COMUNE:"CALAMONACI",CAB:"828301"},
{ID:"7",DENOMINAZIONE_COMUNE:"CALTABELLOTTA",CAB:"828400"},
{ID:"8",DENOMINAZIONE_COMUNE:"CAMASTRA",CAB:"828509"},
{ID:"9",DENOMINAZIONE_COMUNE:"CAMMARATA",CAB:"828608"},
{ID:"10",DENOMINAZIONE_COMUNE:"CAMPOBELLO DI LICATA",CAB:"828707"}];
AJAX.setDsJSON('ds1',0,10,8109,10);
]]>
</script>
<script>
alert('fine');
</script>
</data>
GESTIONE DEGLI EVENTI
Qualora si volesse intercettare la richiesta è possibile farlo tramite gli eventi, le azioni che vengono di solito svolte sono di due tipi:
Modificare la query prima dell'esecuzione
<?php
function data_select_before($ds)
{
if ($ds->getPropertyName("id")=="idds") // idds è nome del tag xml
{
$ds->ds->dsQuery("SELECT .........", true);
return false;
}
}
?>
Modificare i dati restituiti dalla
<?php
function data_select_after($ds)
{
if ($ds->getPropertyName("id")=="idds") // idds è nome del tag xml
{
$i=0;
global $xml;
$result = array();
while($ds->ds->dsGetRow())
{
$result[$i++]['totale'] = $ds->ds->property["row"]->prezzo;
}
$out = $xml->dataXML($result);
$ds->setProperty("xml", $out);
}
}
?>
LETTURA DATI(lato client)
Il compito di effettuare il parsing del XML ricevuto dal server è affidato al metodo setDsXML contenuto nel file js/ajax.js, in particolare si occupa di:
- Trasferire la struttura DOM dei dati ricevuti dal server in strutture più facilmente gestibili(array) ognuna delle quali associata al corrispettivo ds.
- Richiamare gli eventi di refresh degli oggetti presenti nella pagina e legati ai ds impattati.
- Eseguire codice javascript presente nel output XML.
Di particolare rilievo è il primo punto perché permette di accedere lato client a tutte le informazioni relative ad un datasource e soprattutto ai suoi dati. Se ad esempio volessi leggere la quarta riga del ds1 dell'esempio sopra proposto basterebbe scrivere: