martedì 30 gennaio 2007

Rails e Ajax

Realizzare applicazioni moderne, di forte impatto grafico, solitamente porterebbe via molto tempo. Oggi grazie ai tanti framework di sviluppo web agile che si stanno diffondendo è molto più semplice e veloce scrivere intere applicazioni ben fatte con un notevole risparmio di tempo e divertendosi. Esistono diversi framework: primo tra tutti Ruby On Rails, poi segue Nitro (sempre in ruby), e Django scritto in Phyton.

Rails supporta nativamente Ajax ed è molto semplice da utilizzare. Per eseguire una richiesta Ajax è sufficiente utilizzare gli appositi helpers.

Nell'html head della View scriveremo
<%= javascript_include_tag "prototype" %>


per importare le funzioni javascript necessarie.

Mentre per fare un link che aggiornerà un div via ajax scriveremo

<%= link_to_remote( "clicca qui", :update => "div_da_aggiornare", :url =>{ :action => :funzione_remota_da_chiamare }) %>
Rails provverderà a generare il codice javascript necessario per eseguire le richieste via Ajax.

Con questo comando verrà richiamato il controller corrente alla funzione "funzione_remota_da_chiamare" e l'output sarà inserito nell'apposito div chiamato "div_da_aggiornare".

il codice del controller remoto sarà simile a questo
def funzione_remota_da_chiamare
render :text => "Ciao Ciao"
end

Facile no?

Ciao Piero

Per approfondimenti onLamp - Ajax on Rails: OnLamp

3 commenti:

  1. Sto iniziando solo ora a provare rails (riscrivendo il sito... prova la porta 3000 :) ) ,e articoli come questo mi fanno pensare che sia un ottimo prodotto.
    Ma mi resta una curiosità ... come si passano dei parametri alla chiamata ajax?

    RispondiElimina
  2. nell'hash :url => { :action => funzione_da_chiamare, :id => id_da_modificare, :altro_parametro => valore, :altro_parametro2 => bablabla}

    potrai recuperare i valori leggendoli l'hash param (ad esempio param[:altro_parametro])

    RispondiElimina
  3. Grazie, funziona tutto a meraviglia, a breve pubblico il sito versione Rails...

    P.S. è params non param :)

    RispondiElimina