Hola gente,
Según he leido el problema de ejecutar javascript (decentemente) en ajax es una lata.
Encontré esta solución
http://www.formatoweb.com.ar/ajax/ejecutar_codigo_javascript_css_cargado_ajax.php
el ejemplo lo he probado y funciona, aunque no pinta nada. y solo ejecuta el javascript.
Entonces he partido de ahi, y he intentado poner en mi objeto ajax, tras el estado 4 las líneas que me parecieron importantes y necesarias : (a mi parecer)
Código PHP:
var javascript=es_xml.getElementsByTagName("javascript")[0].childNodes[0].data;
// Creo el nuevo JS
var etiquetaScript=document.createElement("script");
document.getElementsByTagName("head")[0].appendChild(etiquetaScript);
etiquetaScript.text=javascript;
Mi función ajax que pinta lo demás en el div es esta.
Código PHP:
function procesaAjax(ajax,capa){
var capaContenedora = document.getElementById(capa);
if(ajax.readyState==1){
capaContenedora.innerHTML="Cargando...";
}else if (ajax.readyState==4){
if(ajax.status==200){
// esto es lo nuevo
if(ajax.responseXML){
es_xml=ajax.responseXML;
alert(es_xml.getElementsByTagName)
var javascript=es_xml.getElementsByTagName("javascript")[0].childNodes[0].data;
// Creo el nuevo JS
var etiquetaScript=document.createElement("script");
document.getElementsByTagName("head")[0].appendChild(etiquetaScript);
etiquetaScript.text=javascript;
}
// fin esto es lo nuevo
document.getElementById(capa).innerHTML=ajax.responseText;
}else if(ajax.status==404){
capaContenedora.innerHTML = "La dirección no existe";
}else{
capaContenedora.innerHTML = "Error: "+ajax.status;
}
}
}
Si envio al div una pagina que tiene formato xml pues ejecuta lo que está entre los comentarios "esto es lo nuevo".
Se supone que ha de recorrer el archivo xml buscando las etiquetas <javascript> para montarlas luego como <scripts> y ejecutarlos pero... el firebug me da esto cuando le envio un xml:
Código PHP:
es_xml.getElementsByTagName("javascript")[0] is undefined
procesaAjax(XMLHttpRequest, "contenido_dinamico")ajax.js (línea 38)
onreadystatechange()()ajax.js (línea 72)
[Break on this error] var javascript=es_xml.getElementsByT...ame("javascript")[0].childNodes[0].data;
Pd; He leido las FAQS antes de postear y tal.
Pd2; Toda ayuda es bien recibida (y lo que no es ayuda)