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

Problema con AJAX - no funciona a la segunda llamada... solo sirve el HTML?

Estas en el tema de Problema con AJAX - no funciona a la segunda llamada... solo sirve el HTML? en el foro de Frameworks JS en Foros del Web. Hola amigos, tengo un problema... Tengo una pagina index.php que llama a otra pagina con AJAX... llama a Datos.php... dentro de datos.php.. tengo un script ...
  #1 (permalink)  
Antiguo 26/05/2006, 17:40
Avatar de richardinj  
Fecha de Ingreso: enero-2005
Ubicación: Ciber Espacio
Mensajes: 2.180
Antigüedad: 19 años, 9 meses
Puntos: 11
Desacuerdo Problema con AJAX - no funciona a la segunda llamada... solo sirve el HTML?

Hola amigos, tengo un problema...

Tengo una pagina index.php que llama a otra pagina con AJAX... llama a Datos.php...

dentro de datos.php.. tengo un script que llama a otra pagina con AJAX... llamada detalles.php

datos.php
Cita:
<div id="mostrar_detalle">
<script language="JavaScript" type="text/javascript">
CARGARDATOS('detalles.php','mostrar_detalle','plan =1'); //pagina, capa, param
</script>
</div>
Bueno el problema es cuando carga datos.php no se ejecuta el script que esta contiene... y por lo tanto no puedo cargar detalles.php .. ya probé con colocar un Alert(); pero tampoco funciona, creo que solo llama codigo HTML y no script...

ahora tengo un problema...

Como solucionaría esto?.. habrá otro modo?

Saludos.

Última edición por richardinj; 26/05/2006 a las 18:41
  #2 (permalink)  
Antiguo 26/05/2006, 17:52
Avatar de B**
B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Antigüedad: 18 años, 9 meses
Puntos: 3
Y como mandas llamar a detalles.php? ...ahh y checa q pusiste en tu script detalles.ASP....
Si no te ejecuta el alert algo esta mal en la llamada, ya que he hecho cosas parecidas a la tuya y ejecuto JS
  #3 (permalink)  
Antiguo 26/05/2006, 18:40
Avatar de richardinj  
Fecha de Ingreso: enero-2005
Ubicación: Ciber Espacio
Mensajes: 2.180
Antigüedad: 19 años, 9 meses
Puntos: 11
Disculpa es PHP... bueno fue un error al quere poner...

el asunto es el siguiente...

Si quiero llamar a una pagina con AJAX... y esta pagina que llamare tiene un script Alert();

funciona ese alert????

en mi caso no funciona...
  #4 (permalink)  
Antiguo 26/05/2006, 19:03
Avatar de B**
B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Antigüedad: 18 años, 9 meses
Puntos: 3
Te habia entendido mal... pero si tienes razon.. si llamas a un pagina.php mediante ajax no funciona el alert, lo acabo de probar y no..:S
  #5 (permalink)  
Antiguo 26/05/2006, 20:03
Avatar de richardinj  
Fecha de Ingreso: enero-2005
Ubicación: Ciber Espacio
Mensajes: 2.180
Antigüedad: 19 años, 9 meses
Puntos: 11
Ohh.... y ahora?
Quien podrá defendernos??????''
  #6 (permalink)  
Antiguo 27/05/2006, 00:53
Avatar de B**
B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Antigüedad: 18 años, 9 meses
Puntos: 3
Bien, pues en la tarde me sospeche que el truco estaba en el innerhtml...y ahora en la noche lo probe y si funciona, esta media chafa la solucion, pero igual sirve:
Dentro de tu funcion donde cargas la pagina externa, ves q tu codigo dice:
tudiv.innerHTML = ajax.responseText ;
Pues a eso le concatenas el codigo JS y listo(si tu alert no depende de ninguna condicion); quedaria asi:
Código HTML:
tudiv.innerHTML = ajax.responseText + alert("Mensaje");
Si tu alert depende de alguna condicion, puedes hacer, que en tu codigo php haga la condicion, si se cumple,poner una variable en true.. y ya del lado del cliente..JS.... pondrias:
Código HTML:
 if (ajax.readyState==4) {
                            var variable=<?php echo $variable; ?>
                            if(variable){alert("Mensaje");}
                            contenedor.innerHTML = ajax.responseText;
                            }
Y listo... si funciona ya que lo acabo de probar...
  #7 (permalink)  
Antiguo 27/05/2006, 10:32
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 19 años, 3 meses
Puntos: 2
Puedes traer tu alert o incluso definir funciones JavaScript en tu archivo procesador si cuando recibes esos datos en tu archivo "llamador" creas una nueva etiqueta <script> en el head y colocas todo dentro de ella. A continuación les dejo un simple ejemplito (bastante inútil, pero lo hice con el objetivo de que se entienda lo que digo) que trae un alert y una función encargada de cambiar el color de fondo de la página principal:

test.php
Código:
<html>
<head>
<script type="text/javascript">
<!-- Crear clase AJAX a gusto llamandola nuevoAjax() -->

function traeScript()
{
	ajax=nuevoAjax();
	ajax.open("POST", "test2.php", true);
	ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	ajax.send("trae=1");
	
	ajax.onreadystatechange=function() 
	{
		if (ajax.readyState==4)
		{ 
			// Aqui es donde creo la etiqueta script y coloco los datos que me llegan dentro de ella. Luego agrego esa etiqueta al head
			nuevoScript=document.createElement("script");
			nuevoScript.text=ajax.responseText;
			document.getElementsByTagName('head')[0].appendChild(nuevoScript);
		} 	
	}
}
</script>
</head>

<body>
<a href="javascript:traeScript();">Trae script</a>
<br>
<a href="javascript:ejecutaScript();">Ejecuta script</a>
</body>
</html>
test2.php
Código:
<?php
if($_POST["trae"]==1)
{
	echo "
	alert('Script traido y funcional');
	function ejecutaScript()
	{
		document.body.style.backgroundColor='#FF0000';
	}";
}
?>
Fijense que si intentan ejecutar el script antes de traerlo mediante los links correspondientes este no se ejecutará, ya que no existe. En el caso de solo intentar traer un alert, obteniendo la respuesta mediante el eval de JavaScript sería mas que suficiente.

Espero que esto responda sus cuestiones.

Saludos.
__________________
R4DS en español | R4DS en inglés
  #8 (permalink)  
Antiguo 27/05/2006, 12:08
Avatar de richardinj  
Fecha de Ingreso: enero-2005
Ubicación: Ciber Espacio
Mensajes: 2.180
Antigüedad: 19 años, 9 meses
Puntos: 11
mmm.. bueno no necesariamente es un alert lo que deseo, pero queria ver un ejemplo aproximado...

El problema es que tengo una funcion CARGARDATOS() .. y ese no me funciona a la segunda ves...

Lo que deseo es que se hagan cargas diferentes en la web... es decir...
que si abro el index.php se ejecute CARGARDATOS('datos.php') [y si funciona normal]... y dentro de datos.php hay otro CARGARDATOS('detalles.php')... Este es el que no me llama , a menos que yo haga click en un boton... lo que quiero es qeu se ejecute directamente...


El index. se carga...
luego carga datos.php
y segudamente detalles.php

todo en uso solo...
  #9 (permalink)  
Antiguo 27/05/2006, 16:07
Avatar de B**
B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Antigüedad: 18 años, 9 meses
Puntos: 3
Mmm, pues lo que puedes hacer es crear otra funcion que cargue pagina externa...y dentro de la primera, osea la que carga datos.php , ponerle en esa funcion que llame a otra, que seria la que cargaria detalles.php:

//Funcion cargarContenido , que es la carga datos.php//solo pongo las linea que cambiara:
Código HTML:
if (ajax.readyState==4 ) {
                            contenedor.innerHTML = ajax.responseText;
                            cargarContenido2('detalles.php','otro');
                            }
//Funcion cargarContenido2, que es la cargaria detalles.php
Código HTML:
function cargarContenido2(archivo,divID){
                        var contenedor;
                        var nombre;


                        contenedor = document.getElementById(divID);
                        contenedor.innerHTML = '<center> <img src="loader.gif" /> </center>';

                        ajax=nuevoAjax();

                            ajax.open("GET","detalles.php",true);


                        ajax.onreadystatechange=function() {
                         if (ajax.readyState==4 ) {
                            contenedor.innerHTML = ajax.responseText;
                            }
                        }
                    ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                    ajax.send(null)
                    }
Ahh y me imagino que las quieres cargar en diferente div... defines otro... y cuando llames al a funcion cargarContenido2,le pones el paraemtro del nuevo div.
Espero y eso sea lo q quieres... tambien lo probe y funciona.
  #10 (permalink)  
Antiguo 29/05/2006, 09:03
Avatar de richardinj  
Fecha de Ingreso: enero-2005
Ubicación: Ciber Espacio
Mensajes: 2.180
Antigüedad: 19 años, 9 meses
Puntos: 11
mmm.. aun no me funciona...
he echo esto en index.php

CARGARDATOS("datos.php","mostrar_datos", "plan="+plan);

CARGARDATOS("detalle.php","mostrar_detalle", "plan="+plan);

y me sale un error que dice que el id del DIV, no existe...
  #11 (permalink)  
Antiguo 29/05/2006, 14:26
Avatar de B**
B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Antigüedad: 18 años, 9 meses
Puntos: 3
Prueba como te dije y si te funcionara..
  #12 (permalink)  
Antiguo 29/05/2006, 16:48
Avatar de richardinj  
Fecha de Ingreso: enero-2005
Ubicación: Ciber Espacio
Mensajes: 2.180
Antigüedad: 19 años, 9 meses
Puntos: 11
Ves yo te dije.. ya me funciona XD...
gracias
  #13 (permalink)  
Antiguo 15/08/2009, 10:26
(Desactivado)
 
Fecha de Ingreso: enero-2008
Mensajes: 272
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: Problema con AJAX - no funciona a la segunda llamada... solo sirve el HTML

Cita:
Iniciado por zaqpz Ver Mensaje
Puedes traer tu alert o incluso definir funciones JavaScript en tu archivo procesador si cuando recibes esos datos en tu archivo "llamador" creas una nueva etiqueta <script> en el head y colocas todo dentro de ella. A continuación les dejo un simple ejemplito (bastante inútil, pero lo hice con el objetivo de que se entienda lo que digo) que trae un alert y una función encargada de cambiar el color de fondo de la página principal:

test.php
Código:
<html>
<head>
<script type="text/javascript">
<!-- Crear clase AJAX a gusto llamandola nuevoAjax() -->

function traeScript()
{
	ajax=nuevoAjax();
	ajax.open("POST", "test2.php", true);
	ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	ajax.send("trae=1");
	
	ajax.onreadystatechange=function() 
	{
		if (ajax.readyState==4)
		{ 
			// Aqui es donde creo la etiqueta script y coloco los datos que me llegan dentro de ella. Luego agrego esa etiqueta al head
			nuevoScript=document.createElement("script");
			nuevoScript.text=ajax.responseText;
			document.getElementsByTagName('head')[0].appendChild(nuevoScript);
		} 	
	}
}
</script>
</head>

<body>
<a href="javascript:traeScript();">Trae script</a>
<br>
<a href="javascript:ejecutaScript();">Ejecuta script</a>
</body>
</html>
test2.php
Código:
<?php
if($_POST["trae"]==1)
{
	echo "
	alert('Script traido y funcional');
	function ejecutaScript()
	{
		document.body.style.backgroundColor='#FF0000';
	}";
}
?>
Fijense que si intentan ejecutar el script antes de traerlo mediante los links correspondientes este no se ejecutará, ya que no existe. En el caso de solo intentar traer un alert, obteniendo la respuesta mediante el eval de JavaScript sería mas que suficiente.

Espero que esto responda sus cuestiones.

Saludos.
Excelente post para incluir javascript, en una pagina llamado con ajax

funciona perfectamente el ejemplo.

Pero tengo el siguiente proglema

Lo que quiero hacer es lo siguiente

de aqui
<script type="text/javascript">
<!--
v1 = "121245";

v2 = "455464";
v3= 400;
v4 = 60;
//-->
</script>

hasta qui entiendo bien

pero no se como incluir esto : <script type="text/javascript" src="http://prueba.prueba.com/ruta/xxx.js"> </script>

en la pagina donde llamo con ajax, quiero poner así:

<div>
<script type="text/javascript">
v1 = "121245";
v2 = "455464";
v3= 400;
v4 = 60;
</script>
<script type="text/javascript" src="http://prueba.prueba.com/ruta/xxx.js"> </script>
</div>

por favor ayúdame muchas gracias
  #14 (permalink)  
Antiguo 15/08/2009, 11:49
Avatar de richardinj  
Fecha de Ingreso: enero-2005
Ubicación: Ciber Espacio
Mensajes: 2.180
Antigüedad: 19 años, 9 meses
Puntos: 11
Respuesta: Problema con AJAX - no funciona a la segunda llamada... solo sirve el HTML

Hola... recalcando de tiempos mi post.. cuando tu cargas con AJAX y quieres que a la ves salga un mensaje o se ejecute algo de javascript que escribio PHP mediante ajax... co funciona... tienes que hacer click o rastrear con un timer si esta la variable o no, para que se ejecute...

Weno con Firefox 3.0 ya funciona, lo que no funcionaba en el resto de navegados...
  #15 (permalink)  
Antiguo 15/08/2009, 14:18
(Desactivado)
 
Fecha de Ingreso: enero-2008
Mensajes: 272
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: Problema con AJAX - no funciona a la segunda llamada... solo sirve el HTML

Cita:
Iniciado por richardinj Ver Mensaje
Hola... recalcando de tiempos mi post.. cuando tu cargas con AJAX y quieres que a la ves salga un mensaje o se ejecute algo de javascript que escribio PHP mediante ajax... co funciona... tienes que hacer click o rastrear con un timer si esta la variable o no, para que se ejecute...

Weno con Firefox 3.0 ya funciona, lo que no funcionaba en el resto de navegados...
Muchas gracias Nuevamente.

Entiendo eso que hay hacer llamar las función, de hecho eso no es mi problema, mi problema es lo siguiente.

Quiero incluir debajo de esto
<script type="text/javascript">
v1 = "121245";
v2 = "455464";
v3= 400;
v4 = 60;
</script>

esta linea de código o mejor chicho el archivo xxx.js

el ejemplo funciona excelente, pero no supe como incluir esto

<script type="text/javascript" src="http://prueba.prueba.com/ruta/xxx.js"> </script>
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




La zona horaria es GMT -6. Ahora son las 02:01.