Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Ejecutar funcion JavaScript tras la respuesta de PHP

Estas en el tema de Ejecutar funcion JavaScript tras la respuesta de PHP en el foro de Frameworks JS en Foros del Web. Hola a todos, Estoy haciendo una página siguiendo el modelo de AJAX y tengo una duda. Intento montar un menu de opciones y el servidor ...
  #1 (permalink)  
Antiguo 27/08/2006, 11:18
 
Fecha de Ingreso: enero-2002
Mensajes: 417
Antigüedad: 22 años, 11 meses
Puntos: 0
Ejecutar funcion JavaScript tras la respuesta de PHP

Hola a todos, Estoy haciendo una página siguiendo el modelo de AJAX y tengo una duda. Intento montar un menu de opciones y el servidor saca dichas opciones de una base de datos. Necesito que una vez cargadas estas opciones en el <div> correspondiente se ejecute una función Javascript para montar el menu propiamente dicho. Es decir, tras el tipico codigo:

function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){
document.getElementById("Menu").innerHTML=xmlHttp. responseText
}
}

se ejecute un javascript. He probado a poner directamente el nombre de la funcion tras esta sentencia pero no funciona. ¿Alguna idea?
  #2 (permalink)  
Antiguo 29/08/2006, 15:13
Avatar de Saruman  
Fecha de Ingreso: mayo-2003
Ubicación: Panama city, Panama, Panama
Mensajes: 1.154
Antigüedad: 21 años, 7 meses
Puntos: 5
que tal. lo haces de esta manera:

en la respuesta de tu php vas a poner mas o menos asi...

Código PHP:
echo("nombre_funcion_js()"); 
y luego despues del responseText lo asignas a tu varible y le mandas un eval.. asi...

Código PHP:
var ExecuteNow ajaxfunc.responseText;
eval(
ExecuteNow); 
y listo....

saludos
__________________
Saruman

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them.
  #3 (permalink)  
Antiguo 22/09/2006, 06:37
 
Fecha de Ingreso: enero-2002
Mensajes: 417
Antigüedad: 22 años, 11 meses
Puntos: 0
Perdona por no agradecertelo antes, pero he estado con otro proyecto y he tenido que retomar este ahora.
He probado lo que me dices, pero desde php no me deja hacer el:

echo("nombre_funcion_js()");

Siempre me dice k no la encuentra, incluya como incluya el archivo .js.
No sé si estoy haciendo algo mal o puede haber otra solucion. Muchas gracias por todo.
  #4 (permalink)  
Antiguo 22/09/2006, 12:22
 
Fecha de Ingreso: noviembre-2002
Ubicación: Mex
Mensajes: 140
Antigüedad: 22 años
Puntos: 0
Cita:
Iniciado por Saruman Ver Mensaje
que tal. lo haces de esta manera:

en la respuesta de tu php vas a poner mas o menos asi...

Código PHP:
echo("nombre_funcion_js()"); 
y luego despues del responseText lo asignas a tu varible y le mandas un eval.. asi...

Código PHP:
var ExecuteNow ajaxfunc.responseText;
eval(
ExecuteNow); 
y listo....

saludos
ingeniosa respuesta
__________________
escribiendo mi libro de AJAX
  #5 (permalink)  
Antiguo 25/09/2006, 14:05
 
Fecha de Ingreso: septiembre-2006
Mensajes: 37
Antigüedad: 18 años, 3 meses
Puntos: 0
Cita:
Iniciado por SuperJavi Ver Mensaje
Perdona por no agradecertelo antes, pero he estado con otro proyecto y he tenido que retomar este ahora.
He probado lo que me dices, pero desde php no me deja hacer el:

echo("nombre_funcion_js()");

Siempre me dice k no la encuentra, incluya como incluya el archivo .js.
No sé si estoy haciendo algo mal o puede haber otra solucion. Muchas gracias por todo.
Para probarlo no incluyas el archivo como include, sino copialo dentro de los head del archivo que lo requiera.
  #6 (permalink)  
Antiguo 25/09/2006, 23:48
Avatar de Saruman  
Fecha de Ingreso: mayo-2003
Ubicación: Panama city, Panama, Panama
Mensajes: 1.154
Antigüedad: 21 años, 7 meses
Puntos: 5
Cita:
Iniciado por SuperJavi Ver Mensaje
Perdona por no agradecertelo antes, pero he estado con otro proyecto y he tenido que retomar este ahora.
He probado lo que me dices, pero desde php no me deja hacer el:

echo("nombre_funcion_js()");

Siempre me dice k no la encuentra, incluya como incluya el archivo .js.
No sé si estoy haciendo algo mal o puede haber otra solucion. Muchas gracias por todo.
que tal...
bueno, tal como te puse en el mensaje asi mismo debe ser... yo estoy asumiendo que ya tu tienes toda la parte de ajax creada, etc etc.... yo simplemente fui al grano....

te dejo un ejemplo:

el php tendra algo asi:

Código PHP:
header('Content-Type: text/xml; charset=ISO-8859-1');
    echo '<?xml version="1.0" encoding="ISO-8859-1"?>';

    echo("alert('hola mundo!');");
y en el javascript del ajax algo asi:
Código PHP:
var ExecuteNow ajaxfunc.responseText
eval(
ExecuteNow); 
te debe arrojar cuando lo ejecutes un alert....
IMPORTANTE: el archivo php que tenga lo que quieres q haga el js, no debe tener mas nada que no sea lo que vallas a usar.... si posee algo mas, debes desaserte de eso, ejemplo en mi caso, codigos html.. yo lo que hago es limpiar la respuesta del php con una funcion q tengo para limpiar los tags y contenido html, para q la respuesta me quede PLAINTEXT... solo asi funcionara bien.... ya hice pruebas poniendo en vez de "alert" el nombre de una funcion q se encuentra en X lugar del site y tambien funciona..... si no entiendes bien, me avisas q con mucho gusto te puedo ayudar..... no te pong el ejmplo entero porque yo hice una clase y la verdad, no tengo tiempo para explicarla... sino con mucho gusto.

saludos
__________________
Saruman

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them.
  #7 (permalink)  
Antiguo 16/10/2006, 18:29
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 10 meses
Puntos: 22
Hola, la verdad es que no quiero que la "respuesta AJAX", (en realidad la respuesta del server), se quede en la cache por varios motivos...

Por ello a la respuesta le coloco cabeceras que indican al server que NO guarde la CACHE, (únicamente por ello van las lineas que contienen header).

Bueno, también yo requiero CORRER JAVA luego del AJAX.

Gracias a SARUMAN ahora puedo hacerlo, busque varias veces y no entendia bien cómo hacerlo hasta que SARUMAN nos dijo cómo.

Para correr solo UNA vez el XMLHttpRequest lo que hago es generar UNA SOLA SALIDA de datos desde el server, colocando el JAVASCRIPT al principio y final de los caracteres HTML

Luego con JS divido la cadena con split que es una propiedad de JS, (busca en la red y veras + detalles).

Luego, como a veces se requiere JS despues del html, tonces vuelvo a evaluar or segunda vez el codigo JS, (si existe).

Ay bueno, espero que el codigo se explique por si mismo... sino seguro SARUMAN les ayuda en lo que no les quede claro.

Aqui queda mi codigo:

Parte JS, que procesa el JS y que es el AJAX propiamente dicho:
Código PHP:
if(req.status==200){
    
JAVA=req.responseText.split('HTML');
    if(
JAVA.length>1){
        eval(
JAVA[0]);
        
info.innerHTML=JAVA[1];
        if(
JAVA[2].length!='undefined')eval(JAVA[2]);
        }
        else 
info.innerHTML=JAVA[0];
    } 
Y ahora la parte del servidor, en mi caso con PHP, pero da igual si es ASP, JSP, PERL, etc..
Código PHP:
    header('Content-Type: text/html; charset=ISO-8859-1');
    
header('Cache-Control: no-cache, must-revalidate');
    
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
    echo 
'alert("Hola Mundo 1");';
    echo 
'HTML';
    echo 
'<p style="border:1px dashed red;">info</p>';
    echo 
'HTML';
    echo 
'alert("Hola Mundo 2");'
Espero halla quedado "entendible", simplemente con JS dividimos la respuesta del server por los caracteres HTML, y cada una de las partes JAVASCRIPT las evaluamos con eval como nos ha enseñado SARUMAN
  #8 (permalink)  
Antiguo 16/10/2006, 18:31
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 10 meses
Puntos: 22
SARUMAN cuando voy a http://www.softmediadevelopment.com/cv/ me da 403...

:-? en que pais estas ?

Podes darnos una mano en http://www.forosdelweb.com/f127/pagina-ajax-php-abre-pagina_ultra_secreta-php-como-impedir-acceso-directo-2-a-433568/
  #9 (permalink)  
Antiguo 16/10/2006, 19:38
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 10 meses
Puntos: 22
Hola, hice unas pruebas con la consola de FF y el anterior código da un error "insignificante", (todo corre), pero da error!

Asi que va mejor de esta manera:
Código PHP:
eval(JAVA[0]);
                
info.innerHTML=JAVA[1];
                if(
typeof(JAVA[2])!='undefined')eval(JAVA[2]); 
Es decir, cambiar
Código PHP:
if(JAVA[2].length!='undefined'
Por
Código PHP:
if(typeof(JAVA[2])!='undefined')eval(JAVA[2]); 
Oye Saruman ya se que estas en Panama, podes ayudar aqui:

http://www.forosdelweb.com/showthread.php?t=433568 ?
  #10 (permalink)  
Antiguo 08/03/2007, 09:48
Avatar de fasc  
Fecha de Ingreso: septiembre-2004
Mensajes: 6
Antigüedad: 20 años, 3 meses
Puntos: 0
Ejecutar una funcion JS llamada atravez de AJAX.

Como borrro este mensaje???

Última edición por fasc; 08/03/2007 a las 10:06
  #11 (permalink)  
Antiguo 08/03/2007, 10:02
Avatar de fasc  
Fecha de Ingreso: septiembre-2004
Mensajes: 6
Antigüedad: 20 años, 3 meses
Puntos: 0
Ejecutar una funcion JS llamada atravez de AJAX.

Saludos...

Estoy teniendo casi el mismo problema que SuperJavi, esta un poco viejo el tema, pero según leí puede que ustedes me ayuden.Yo Llamo un archivo que contiene html y funciones JS que deben ejecutarse en ese html.

En otras palabras:

index.php contiene el <div> con el id="cat_tabla"
<div id="cat_tabla"></div>

Por medio de ajax llamo al archivo tabla.php para que se despliegue dentro del div con el id="cat_tabla"

tabla.php contiene html y funciones JS.

Mi problema consiste en que tengo una función que debe ejecutarse luego de que se realice un evento dentro del html recién cargado a través de ajax, digamos “onclick”.

Según el ejemplo que mostraron aquí después: de que carga la respuesta PHP se utiliza lo que mostró Saruman "eval" para que se ejecute el JS y el script de Anarko para dividir el javascript del html. Esto hace que inmediatamente depues de que cargue el HTML se ejecute lo que tienes en JS. Lo he probado y funciona perfectamente, pero no me funciona cuando es una función JS, es decir, no deseo que se ejecute inmediatamente sino despues de realizar un evento en el HTML que acabo de llamar.

Este es el contenido de index.php
Código HTML:
<a onclick="xmlhttp_function('1')">Cargar Archivo</a><br /><br />
<div id="cat_tabla"></div> 
Esto es tabla.php
Código HTML:
<form name="frm" method="GET" action="">
<input type="text" onclick="valor()" name="name1" value=''>
</form>

|fasc| 

function valor(){
     document.frm.name1.value='adios1';
}
la funcion de ajax tiene esto:
Código PHP:
function xmlhttp_function(cat){
  var 
document.getElementById("cat_tabla");
  
xmlhttp.open("GET","parser.php?id=" cat true);
  
xmlhttp.onreadystatechange = function(){
    if (
xmlhttp.readyState == 4){
      
results xmlhttp.responseText.split('|fasc|');
      
x.innerHTML results[0];
      eval(
results[1]);
    }
  }
  
xmlhttp.send(null);

El archivo parser.php es el que llama el archivo tabla.php tiene esto:

Código PHP:
if($_GET[id] == 1){
    include(
"tabla.php");

Hay algo que tengo mal o es de alguna otra manera que se puede hacer esto?
  #12 (permalink)  
Antiguo 02/09/2007, 19:24
 
Fecha de Ingreso: septiembre-2007
Mensajes: 2
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: Ejecutar funcion JavaScript tras la respuesta de PHP

Cita:
Iniciado por Saruman Ver Mensaje
que tal. lo haces de esta manera:

en la respuesta de tu php vas a poner mas o menos asi...

Código PHP:
echo("nombre_funcion_js()"); 
y luego despues del responseText lo asignas a tu varible y le mandas un eval.. asi...

Código PHP:
var ExecuteNow ajaxfunc.responseText;
eval(
ExecuteNow); 
y listo....

saludos


Saruman, cuando colocas en la instruccion la palabra ajaxfunc a cual de las funciones te refieres? mi codigo js es como sigue a continuación:

Código:
var xmlHttp

function insertCronograma(hortype,fecini,horini,fecfin,horfin,pfecini,horpre,hextras)
{ 
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
 {
 alert ("El navegador no soporta peticiones HTTP")
 return
 }
var url="insertIntoCrono.jsp";
url=url+"?hortype="+hortype;
url=url+"&fecini="+fecini;
url=url+"&horini="+horini;
url=url+"&fecfin="+fecfin;
url=url+"&horfin="+horfin;
url=url+"&pfecini="+pfecini;
url=url+"&horpre="+horpre;
url=url+"&hextras="+hextras;

url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=stateChanged 
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}


function stateChanged() 
{ 
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
 { 
 document.getElementById("txtHint").innerHTML=xmlHttp.responseText
var ExecuteNow = ajaxfunc.responseText;
eval(ExecuteNow);
 } 
}

function GetXmlHttpObject()
{
var xmlHttp=null;
try
 {
 // Firefox, Opera 8.0+, Safari
 xmlHttp=new XMLHttpRequest();
 }
catch (e)
 {
 //Internet Explorer
 try
  {
  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  }
 catch (e)
  {
  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
return xmlHttp;
}
y en java estoy mandando la siguiente instruccion al DIV

Código:
out.println("<script>alert('"+ex+"')</script>");
Un simple alert con una variable.

Que me sugieres.

Gracias.
  #13 (permalink)  
Antiguo 02/09/2007, 21:59
 
Fecha de Ingreso: septiembre-2007
Mensajes: 2
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: Ejecutar funcion JavaScript tras la respuesta de PHP

Saruman, ya no necesito la respuesta al mensaje anterior ... gracias de todos modos, ya entendí a que te referías.

Gracias de todos modos.
  #14 (permalink)  
Antiguo 04/09/2007, 08:32
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años, 7 meses
Puntos: 35
Re: Ejecutar funcion JavaScript tras la respuesta de PHP

loading..........

Hice un howto de como ejecutar javascript... ya que usar eval... no es así de fácil y tampoco RECOMENDADO.

connection closed.
__________________

Maborak Technologies
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 18:49.