!Librerie che "nascondano" la complessità ajax:
Ne esistono parecchie open. Nello sviluppo "webup2" stiamo utilizzando prototype.\\
[http://www.prototypejs.org/]\\
Avevo scritto qualcosa [qui|WEBUP2]


----

Si, è ottimo, lo stiamo usando anche noi, anche se non esplicitamente per implementare chiamate AJAX, se non in pochi casi. E' comodissimo anche per il javascript più tradizionale, visto chè è cross-browser e che aggiunge agli elementi della pagine funzioni e attributi per la manipolazione abbastanza semplici da usare, e soprattuto ben documentati.

--m.sanfilippo, 12-nov-2008


----

Io invece sono abituato ad usare strumenti che per quanto possibile tolgano la complessità di usare direttamente il javascript ma che in qualche modo siano in forma di IOC o di generatori di codice javascript. Due esempi sono:
* DWR che permette di interagire con Java e ha un buon seguito nella community Java-Ajax
* GWT che permette di dimenticarsi di Javascript e di utilizzare Java per generare interfaccie SWT/Swing-like
  Inoltre in questo caso è possibile anche aggiungere componenti già creati e molto funzionali come quelli forniti dal progetto GWT-EXT

--Carlo Cestana, 09-dic-2008 09:55


----

Il problema con cui mi sono scontrato io è che spesso il codice generato da questi strumenti è difficile da integrare con quello scritto "alla vecchia", è molto complicato da debuggare e non scala bene, quindi si presta male alle personalizzazioni spinte e/o ai grossi progetti. Diciamo che sono ottimi per utility piccole e con funzioni semplici, pensate e realizzate interamente con uno di questi toolkit.
Sicuramente saranno migliorati con il tempo, e, con buona probabilità, in futuro si tenderà sempre più a utilizzare "generatori" di codice javascript.
Diciamo che prototype risolve alcuni problemi cross-browser e arricchisce gli oggetti con proprietà e metodi che aumentano la leggibilità e l'efficienza del codice.

Lasciatemi dire che, tra l'altro, qui AJAX non c'entra molto...

--m.sanfilippo, 09-Dec-2008 16:23

----
Effettivamente non mi è chiara quale sia la connessione tra strumenti come prototypejs e Ajax...
 
Comunque tornando al discorso sui framework per sviluppo Ajax, è vero che scriversi tutto in casa permette di avere personalizzazioni spinte sul codice prodotto. E' anche vero però che prima di raggiungere la copertura operativa e la qualità dei componenti di un framework è necessario un lavoro mastodontico. Ad esempio, ho dato una occhiata a [Zk|http://www.zkoss.org/] e mi ha colpito la quantità e la qualità dei componenti di base forniti, nonchè il numero di referenze prodotte (700.000 utilizzatori dichiarati e referenze del calibro di Sun).
Perchè per noi è cosi difficile partire da un framework di questo tipo? 


----

Un progetto come GWT è tutt'altro che non debuggabile anzi permette di dimenticare debuggger specifici per javascript. 
Si guardi questo articolo [GWT recipes on Javaworld|http://www.javaworld.com/javaworld/jw-04-2007/jw-04-gwt.html] per capire come fare il debug, come implementare lo unit test e come separare la logica client da quella server con GWT.

Comunque penso che prodotti come GWT o come ZK abbiano il grande pregio di aiutare a preoccuparsi meno del layout e della compatibilità tra browser(perchè ci pensano loro) e più del flusso di interazione con l'utente. 

--Carlo Cestana, 10-dic-2008 16:37


----

Prototype c'entra con AJAX perchè fornisce delle API specifiche per wrappare l'XMLHttpRequest.
Quello che intendevo è che alcuni tool che in rete sono "taggati" sotto il nome di framework AJAX sono in realtà delle librerie di componenti che in alcuni casi usano chiamate asincrone javascript, ma che hanno come scopo principale la creazione di applicazioni RIA e di effetti grafici "fighi". AJAX, quindi,  se c'è è nascosto "dietro" il componente: in questo senso dico che AJAX c'entra poco, almeno per il senso che credo avesse la domanda.  
Possiamo aprire una discussione su questi toolkit e in particolare su GWT, in un altra domanda.
Per rendere la discussione più concreta e non rimanere su link e nomi, vi posto un esempio di uso di Prototype per AJAX dalla nostra applicazione:
%%prettify 
{{{

return new Ajax.Request(contextRoot+'/index.html',
    {
	parameters: {azione: 'noteOrdine', codiceOrdine: '001_'+codice},
        onSuccess: function(transport){
            showDivDetails(element, codice,transport.responseText ,contextRoot);
        },
        onFailure: function(transport){
            alert("Si è verificato un problema nella ricerca dell'ordine: "+codice);
        }        
    });	
}}}
/%
Notate che è una anonymous inner class.


E vi posto anche un esempio di chiamata ajax semplice che ho trovato sul web:
%%prettify 
{{{

var req;

function loadXMLDoc(url) {
	req = false;
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest && !(window.ActiveXObject)) {
    	try {
			req = new XMLHttpRequest();
        } catch(e) {
			req = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
       	try {
        	req = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		req = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		req = false;
        	}
	}
    }
    
    if(req){
	req.onreadystatechange = processReqChange;
	req.open("GET", url, true);
	req.send("");
	}
}

}}}
/%

Mentre la parte "solo ajax" è molto semplice:

%%prettify 
{{{
req = new XMLHttpRequest();
req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.send("");
}}}
/%

Ma c'è tutta una gestione di eccezioni ed errori che non è banale, e sencondo me non compre nemmeno tutti i casi.
Oltre alla classe Ajax.Request, prototype fornisce anche API per registrare eventi e per chiamate temporizzate, che non sono semplici da realizzare in javascript "puro".




--m.sanfilippo, 11-Dec-2008 11:20