Javascript & Ajax? eval()!

Oggi dovevo eseguire del codice Javascript nel risultato di una chiamata ajax. La template è fatta circa così:

CODE:
  1. <?php echo __('Aggiungi prodotto') ?><input type="button" value="+" onclick="addprod()" />
  2. <?php echo javascript_tag("
  3.     function addprod() {
  4.         alert('ciao')
  5.     }
  6. ") ?>

Se chiamata "direttamente", questa template funziona è visualizzerà correttamente l'alert. Ciò non si verificherà invece se la template in questione è il risultato di una chiamata Ajax. Come spiega il buon Sergio Pereira, ciò dipende dal fatto che il codice Javascript nel risultato di una chiamata ajax viene valutato (tramite la funzione eval()) per cui la template deve essere riscritta nel seguente modo:

CODE:
  1. <?php echo __('Aggiungi prodotto') ?><input type="button" value="+" onclick="addprod()" />
  2. <?php echo javascript_tag("
  3.     addprod = function() {
  4.         alert('alora')
  5.     }
  6. ") ?>

in modo che la funzione venga creata.

3 Comments

  1. VIttore says:

    Uhm…. interessante.
    Come comportarsi nel caso in cui il risultato di una chiamata Ajax sia una template che contiene una possibile ulteriore chiamata Ajax (remote_link_to)?

  2. dawson says:

    oh, finalmente! :-)

Leave a Reply