Commenti dinamici con ajax ========================== by triex Nell'era del web 2.0 ormai si DEVE prestare attenzione alla qualità del servizio che si vuole offrire. Aldilà di tutte le inutili pacchianerie, AJAX è in grado di migliorare notevolmente le prestazioni di un sito, senza nemmeno radicali stravolgimenti. Per capire cos'è AJAX e come funziona rimando a questa buona guida: http://javascript.html.it/guide/leggi/95/guida-ajax/ Quello che segue è l'applicazione delle funzioni lì descritte ai temi della più celebre piattaforma di blogging: Wordpress. L'effetto che si vuole ottenere è quello di un div contenente i commenti che viene richiamato quando si preme il link ai commenti, senza dover caricare una nuova pagina. All'interno della pagina index.php possiamo modificare il link dei commenti come segue: /?comments_popup= costruisce l'indirizzo della pagina da richiamare e restituisce una cosa del tipo: http://www.siteurl.com/?comments_popup=3 (the_ID restituisce l'ID del post di cui si richiedono i commenti). onclick="return caricaCommento(this.href, );" chiama la funzione che si occuperà di chiamare la pagina asincronamente. Vengono passati l'indirizzo e l'id. Notare che l'id in teoria è già compreso nell'indirizzo, per cui basterebbe una piccola modifica alla funzione, per recuperarlo. onkeypress="return this.onclick();" chiama la funzione quando viene premuto un tasto nel momento in cui il focus è su quel link. style="display: inline" indica che il link deve essere visibile. Verrà sostituito dal link "Nascondi" quando i commenti saranno stati caricati. id="mostra-" assegniamo un id univoco a questo link. E' una funzione di wordpress che restituisce un determinato testo a seconda che i commenti siano 0, 1 o più di uno. Notare che il link creato è "degradabile", ovvero non preclude la funzionalità del sito nel caso in cui Javascript non sia presente. Creiamo di seguito il link "Nascondi", che sarà invisibile finché non compariranno i commenti. Questo è un link fittizio in quanto non porta da nessuna parte, ma chiama soltanto la funzione apposita. style="display:none" fa in modo che non venga visualizzato. Ancora una ultima cosa:
"; lista.innerHTML += "Errore riscontrato: " + statusText[ajax.status]; } } } // invio richiesta ajax.send(null); } return usaLink; } La funzione è ben spiegata nella guida di HTML.IT, ed è banalmente una richiesta asincrona alla pagina dei commenti, che vengono riversati nel div. function nascondiCommento(id) { var lista = prendiElementoDaId("comments-" + id), nascondi = prendiElementoDaId("nascondi-" +id), mostra = prendiElementoDaId("mostra-" +id); lista.style.display = "none"; nascondi.style.display = "none"; mostra.style.display = "inline"; return true; } Questa funzione è ancora più banale: si limita a nascondere il div dei commenti e a mostrare nuovamente il link per caricarli. Passiamo ora alla parte più interessante: aggiungere un commento asincronamente. Cominciamo con le necessarie modifiche al file comments-popup.php. "); alert("Errore riscontrato: " + statusText[ajax.status]); } } } ajax.send(dati); return usaLink; } In pratica la funzione riceve l'intero form, recupera i contenuti dei vari campi (si potrebbero anche introdurre controlli per valutarne la validità), costruisce la stringa di valori da inviare con il metodo POST (si noti la funziona escape(), necessaria poiché le varie variabili sono separate da una &, e se in uno dei campi compare una & le variabili rimangono separate male e l'operazione non va a buon fine. Con questa funzione invece la & nei campi viene sostituita con la sua entità html. Fine °°, bisogna solo ricordarsi di includere ajax.js in header.php: