Esempio Online Anteprima
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

AJAX.request('POST', 'mypage.php', 'data=load&dsobjname=ds1', false, true);

Richiesta di un più datasource presente nella pagina

AJAX.request('POST', 'mypage.php', 'data=load&dsobjname=ds1,ds2,..,dsn', false, true);

Richiesta di tutti i datasource presenti nella pagina

AJAX.request('POST', 'mypage.php', 'data=loadall', false, true);


FILTRO PER SINGOLA TRANSAZIONE

Richiesta di un singolo datasource presente nella pagina con filtro

AJAX.request('POST', 'mypage.php', 'data=load&dsobjname=ds1&dswhere=' + encodeURIComponent('CAB=829002'), false, true);


FILTRO PERMANENTE

Qualora si voglia effettuare una richiesta in maniera tale da mantere un filtro permanente nel datasource si dovrà:

dsObj.DSsearch = 'FIELDNAME='+encodeURIComponent(fieldvalue);
AJAX.dsmore(dsObj, '
data=load&dsobjname=ds1');

Richiesta trasparente (non visualizza il loader):

AJAX.hideloader = true;
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:

<?xml version="1.0" encoding="utf-8"?>
<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:

$('ds1').DSresult[4]['DENOMINAZIONE_COMUNE']