Javascript & Ajax? eval()!

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

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

Se chiamato “direttamente”, questo template funziona e visualizzerà correttamente l’alert. Ciò non si verificherà invece se il 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 il template deve essere riscritto nel seguente modo:

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

in modo che la funzione venga creata.

3 Replies to “Javascript & Ajax? eval()!”

  1. 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)?

Leave a Reply

Your email address will not be published. Required fields are marked *