Lazio Catania 0 – 0

Cosa ci fanno in Serie A squadre come il Catania !
Sono arrivati a Roma per non giocare.
Tutti e 11 a difendere in area.
Perdere tempo in ogni occasione, oltepassando i limiti del ridicolo.

La loro collocazione ideale è la Serie B, se non le categorie inferiori.

Gli spettatori si aspettano di vedere una partita di calcio, non le barricate e le sceneggiate per perdere tempo.

Che schifo.

Gestire eventi con javascript

Per separare il codice, si aggiungono dei “listener” agli elementi del DOM.
Ma per rimuovere questi listener è necessario specificare la funzione di callback che compare come secondo parametro in addEventListener.
Se la funzione di calback è anonima ?
Bisogna renderla non anonima:

addEventListener('click', function callback() {
$('container').textContent = "testo modificato";
$('container').removeEventListener('click', callback, false);
 }, false);

Un candidato per il mio server

IBM x3650 M3 Express
Riepilogo hardware:

* Chassis da 2U
* Fino a due processori Intel® Xeon® serie 5500/5600 6-core a 3,33 GHz (4-core a 3,46 GHz) con tecnologia QuickPath Interconnect (QPI) e fino a 1.333 MHz di velocità di accesso alla memoria
* Memoria DDR-3 di nuova generazione ad alte prestazioni, fino a 192 GB di RDIMM1 o 48 GB di UDIMM1
* Flessibilità dello storage interno con fino a 16 HDD SAS/SATA o SSD hot-swap da 2,5″
* Fino a 2 slot PCIe
* Chiave USB da 2 GB opzionale per la virtualizzazione, contenente l’hypervisor incorporato VMware ESXi 4.0

Separazione codice JavaScript

Cercando in rete, ho trovato i modi più disparati per aggiungere un listener ad un elemento: chiamare una funzione in body onLoad(), oppure aggiungere un listener all’ evento “load” per lanciare una funzione onClick……le cose più assurde !!

Basta semplicemente seguire questi passi:

  • Includere lo script nell’ head con:
    <script src="nomefile.js" type="text/javascript"><!--mce:0--></script>
  • Scrivere in nomefile.js una funzione che viene eseguita al caricamento della pagina, in cui si assegnano i listener agli oggetti della pagina:
    window.addEventListener(
            'load',
            nomefunzione,
            false);
    

    Oppure, in modo più semplice:

    window.onload = function() {
            document.getElementById('id-elemento').addEventListener('click', callback, false);
            ......
    }
    
  • con la precedente ‘nomefunzione’ possiamo impostare i listener per gli elementi che ci interessano.

Rimane in sospeso una questione: “quando” avviene l’ evento window.onload ?
Se una qualche immagine è ancora da caricare nella pagina, alcuni altri elementi sono invece già visualizzati, ma la funzione onload ancora non viene eseguita.
Il discorso è complesso: di Peter Michaux.
Ovviamente ci sono delle differenze tra i vari browser e tra le varie versioni dei browser: se si vuole tenere conto di queste differenze bisogna scrivere qualcosa di più complesso; per un esempio vedere

//setup onload function
if(typeof window.addEventListener != 'undefined')
{
    //.. gecko, safari, konqueror and standard
    window.addEventListener('load', funzione, false);
}
else if(typeof document.addEventListener != 'undefined')
{
    //.. opera
    document.addEventListener('load', funzione, false);
}
else if(typeof window.attachEvent != 'undefined')
{
    //.. win/ie
    window.attachEvent('onload', funzione);
}

//** remove this condition to degrade older browsers
else
{
    //.. mac/ie5 and anything else that gets this far

    //if there's an existing onload function
    if(typeof window.onload == 'function')
    {
        //store it
        var existing = onload;

        //add new onload handler
        window.onload = function()
        {
            //call existing onload function
            existing();

            //call generic onload function
            funzione();
        };
    }
    else
    {
        //setup onload function
        window.onload = funzione;
    }
}

Ma anche così potrebbero esserci delle limitazioni.

Ajax e Prototype: appunti sparsi

L’ oggetto Ajax di è una interfaccia di astrazione della richiesta xmlHttpRequest: basta usare la sua sintassi per non dover curarci del lavoro sporco (compatibilità cross-browser ecc…).

Una richiesta Ajax con Prototype è del tipo:

new Ajax.Request('/someURL', {opzioni})

in cui opzioni può contenere diversi parametri.
Ulteriori informazioni: Ajax.Request reference, Ajax options

Uno è il metodo della richiesta: GET o POST; altri sono le funzioni di callback; altri ancora sono i parametri passati con la richiesta (sia con POST che con GET).

Esempio:

new Ajax.Request('/someURL',
                  method: 'GET',
                  onSuccess: nomefunzione(xhr),
                  onFailure: nomefunzione(xhr));

Altri callback sono : unUnitialized, onLoading, onLoaded, onInteractive (deprecati tutti e 4 perchè non supportati da tutti i browser), onComplete, onException, onXXX dove XXX è il codice di risposta HTTP (i.e. 200 o 404);

I parametri passati con la richiesta si specificano in 2 modi (sia con GET che con POST):

parameters: {nome1: 'valore1', nome2: valore2, ....}

oppure

parameters: nome1='valore1'&nome2=valore2&..... ;

Ricordare: non usare GET per chiamate che alterano i dati; POST non viene messo in cache dai browser.

Serializzazione: PROTOTYPE fornisce un metodo per serializzare i dati passati da un form.
Ad esempio:

parameters: $('id_form').serialize(true);

Risponditori globali: PROTOTYPE consente di impostare dei callback globali, che rispondono sempre per gli eventi a cui sono collegati.

Ajax.Responders.register( {
        onCreate: function(...),
        onComplete: function(...)});

in cui si può notare un nuovo evento: onCreate

HTML con Ajax: PROTOTYPE fornisce un metodo per riempire un container con l’ HTML fornito da Ajax.
La sua sintassi è come quella di Request, ma al primo posto c’è un nuovo parametro: l’ id del container; indicando con un hash l’ id di due container si può modificare il container a seconda di successo o di errore:

new Ajax.Updater(
        {success: 'id_div_OK', failure: 'id_div_ERR'},
        '/someURL',
        options......);