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.

Unisciti alla discussione

3 commenti

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

phpDay - Maggio 2019 a Verona