Ajax consente l'aggiornamento dinamico di una pagina web, ma se nel contenuto della response è presente del codice javascript questo non viene eseguito.
Come possiamo risolvere questo problema?
Cercando in rete ho trovato che la soluzione più semplice è quella di estrarre con una regular expression il codice all'interno del tag <script> e di passarlo alla funzione eval(). Vediamo in dettaglio un esempio utilizzando per la chiamata Ajax la libreria prototype:
var regex = /<script\b[^>]*>([\s\S]*?)<\/script>/gm;
function DoAjax(url)
{
new Ajax.Request(url,
{
method: 'get',
onSuccess: updateAjaxArea,
onFailure: showMessage
});
}
function updateAjaxArea(transport)
{
$('ajaxarea').innerHTML = transport.responseText;
var str = transport.responseText;
var scripts = str.match(regex);
eval(scripts[0].replace(/(<\s*\/?\s*)script(\s*([^>]*)?\s*>)/gi,''));
}
function showMessage(transport)
{
alert('An error occurred during the AJAX request.');
}