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

No puedo ejecutar scripts con ajax

Estas en el tema de No puedo ejecutar scripts con ajax en el foro de Frameworks JS en Foros del Web. Buenas tardes. Disculpen la molestia, se que al momento de traer un HTML con ajax no interpreta cualquier script que contenga. Pero mi duda es.. ...
  #1 (permalink)  
Antiguo 13/11/2012, 13:00
 
Fecha de Ingreso: junio-2012
Mensajes: 35
Antigüedad: 11 años, 10 meses
Puntos: 4
Pregunta No puedo ejecutar scripts con ajax

Buenas tardes. Disculpen la molestia, se que al momento de traer un HTML con ajax no interpreta cualquier script que contenga. Pero mi duda es.. Si los "src=" de los script los pongo en el index o la pagina que recarga al inicio deberían de funcionar no?

Estoy trayendo un slider de jflow y los scripts los tengo en el header del index, pero aun así no los ejecuta, que puede estar pasando? Gracias.

El html que traigo solo contiene eso.. HTML lo demas lo trato de hacer en el index pero no tengo resultados.

Gracias por su tiempo.

Esto es todo lo que me traigo con ajax:

Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>jFlow Plus</title>

</head>

<body>

<div id="ppal">
<span class="jFlowPrev"><div><img src="images/izquierda.jpg" /></div></span>
<div id="container">
<div id="mySlides">
    <div id="slide1">    
        <img src="images/imagen1.jpg" alt="Slide 1 jFlow Plus" />
	</div>    	
    <div id="slide2">
        <img src="images/imagen2.jpg" alt="Slide 2 jFlow Plus" />
    </div>   
	<div id="slide3">
        <img src="images/imagen4.jpg" alt="Slide 3 jFlow Plus" />
    </div>
    <div id="slide4">
        <img src="images/imagen5.jpg" alt="Slide 4 jFlow Plus" />
    </div>
    <div id="slide5">
        <img src="images/imagen6.jpg" alt="Slide 5 jFlow Plus" />
    </div>
</div>

<div id="myController">
   <span class="jFlowControl"></span>
   <span class="jFlowControl"></span>
   <span class="jFlowControl"></span>
   <span class="jFlowControl"></span>
   <span class="jFlowControl"></span>
</div>
</div>

<span class="jFlowNext"><div><img src="images/derecha.jpg" /></div></span>

</div>
</body>
</html> 
  #2 (permalink)  
Antiguo 13/11/2012, 14:35
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: No puedo ejecutar scripts con ajax

Cita:
Buenas tardes. Disculpen la molestia, se que al momento de traer un HTML con ajax no interpreta cualquier script que contenga. Pero mi duda es.. Si los "src=" de los script los pongo en el index o la pagina que recarga al inicio deberían de funcionar no?
Sip.

De todos modos si es posible ejecutar los scripts si los guardas en un tag conocido, por ejemplo entre tags <script></script> y luego "evaluas" el contenido, o sea:

if (GET_xmlhttp.responseText.indexOf("<script>") > -1) {
var x = GET_xmlhttp.responseText.indexOf("<script>") + "<script>".length;
var y = GET_xmlhttp.responseText.indexOf("</script>") - x;
eval(GET_xmlhttp.responseText.substr(x, y));
}

Cita:
Estoy trayendo un slider de jflow y los scripts los tengo en el header del index, pero aun así no los ejecuta, que puede estar pasando? Gracias.

El html que traigo solo contiene eso.. HTML lo demas lo trato de hacer en el index pero no tengo resultados.

Gracias por su tiempo.

Esto es todo lo que me traigo con ajax:
Seguramente el problema es que estás redeclarando el html y el body al traerlo nuevamente con ajax, o sea lo que deberías hacer es quitar todo esto:

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>jFlow Plus</title>
  5.  
  6. </head>
  7.  

y tambien todo esto:
Código HTML:
Ver original
  1. </body>
  2. </html>

probemos así antes de revisar bien parte por parte.
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #3 (permalink)  
Antiguo 13/11/2012, 16:16
 
Fecha de Ingreso: junio-2012
Mensajes: 35
Antigüedad: 11 años, 10 meses
Puntos: 4
De acuerdo Respuesta: No puedo ejecutar scripts con ajax

Cita:
Iniciado por stramin Ver Mensaje
Sip.

Seguramente el problema es que estás redeclarando el html y el body al traerlo nuevamente con ajax, o sea lo que deberías hacer es quitar todo esto:

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>jFlow Plus</title>
  5.  
  6. </head>
  7.  

y tambien todo esto:
Código HTML:
Ver original
  1. </body>
  2. </html>

probemos así antes de revisar bien parte por parte.

Gracias por responder stramin! Si estaba redeclarando pero ya lo quité y aún así no funciona. Lo raro es que si al HTML que traigo con ajax le agrego los scripts y lo ejecuto a parte si funciona perfectamente. Pero usando ajax no funciona.

Los script los pongo de la siguiente manera en el index y dentro del "head", yo no le veo ningun error:

Código HTML:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script src="scripts/jflow.plus.js" type="text/javascript"></script>
<script type="text/javascript">
	$(document).ready(function(){
	    $("#myController").jFlow({
			controller: ".jFlowControl", // must be class, use . sign
			slideWrapper : "#jFlowSlider", // must be id, use # sign
			slides: "#mySlides",  // the div where all your sliding divs are nested in
			selectedWrapper: "jFlowSelected",  // just pure text, no sign
			width: "638px",  // this is the width for the content-slider
			height: "311px",  // this is the height for the content-slider
			duration: 400,  // time in miliseconds to transition one slide
			prev: ".jFlowPrev", // must be class, use . sign
			next: ".jFlowNext", // must be class, use . sign
			auto: true	
    });
});
</script> 

Última edición por theroutermatic; 13/11/2012 a las 16:34
  #4 (permalink)  
Antiguo 14/11/2012, 05:36
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: No puedo ejecutar scripts con ajax

Es normal, es por que lo que hace ajax es guardar el contenido de la página en una variable y luego escribe el contenido de esa variable en el documento, por lo tanto los scripts se convierten en solo texto.

por eso lo que se hace es usar esa función que te he puesto más arriba, o sea esta:

if (GET_xmlhttp.responseText.indexOf("<script>") > -1) {
var x = GET_xmlhttp.responseText.indexOf("<script>") + "<script>".length;
var y = GET_xmlhttp.responseText.indexOf("</script>") - x;
eval(GET_xmlhttp.responseText.substr(x, y));
}

dentro de la función ajax y despues del envío del contenido al documento, para que funcione, además debes cambiar este tag:

<script type="text/javascript">

por este:

<script>

y todo funcionará normalmente.
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #5 (permalink)  
Antiguo 14/11/2012, 09:34
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: No puedo ejecutar scripts con ajax

Probablemente te esté sucediendo esto
http://foros.emprear.com/ajax/html-c.../deportes.html

mirá el uso de la función cargarRecursos()

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #6 (permalink)  
Antiguo 14/11/2012, 09:44
 
Fecha de Ingreso: junio-2012
Mensajes: 35
Antigüedad: 11 años, 10 meses
Puntos: 4
De acuerdo Respuesta: No puedo ejecutar scripts con ajax

dentro de la función ajax y despues del envío del contenido al documento, para que funcione[/QUOTE]


Gracias nuevamente.

Lo he puesto de la siguiente manera:

Código HTML:
/*fUNCION PARA CARGAR EL ARCHIVO HTML*/
function Mostrar(pagina, id){
	var oid = document.getElementById(id);
	peticion_http.open("GET", pagina);
	peticion_http.onreadystatechange = function(){
		if(peticion_http.readyState == 4 && peticion_http.status == 200){
			oid.innerHTML = peticion_http.responseText;	
		}
	}
	peticion_http.send(null);
	

/*Aqui el codigo para que funcione el script*/
		if (GET_xmlhttp.responseText.indexOf("<script>") > -1) {
		var x = GET_xmlhttp.responseText.indexOf("<script>") + "<script>".length;
		var y = GET_xmlhttp.responseText.indexOf("</script>") - x;
		eval(GET_xmlhttp.responseText.substr(x, y));
		}
}
Si es así es que algo mal hay en otra parte por que no logro que funcione.
  #7 (permalink)  
Antiguo 14/11/2012, 10:18
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: No puedo ejecutar scripts con ajax

En tu caso la variable tiene otro nombre (peticion_http), solo basta con cambiarle el nombre al fragmento que te pase, y he movido el send(null) al final:

Código Javascript:
Ver original
  1. /*fUNCION PARA CARGAR EL ARCHIVO HTML*/
  2. function Mostrar(pagina, id){
  3.     var oid = document.getElementById(id);
  4.     peticion_http.open("GET", pagina);
  5.     peticion_http.onreadystatechange = function(){
  6.         if(peticion_http.readyState == 4 && peticion_http.status == 200){
  7.             oid.innerHTML = peticion_http.responseText;
  8. /*Aqui el codigo para que funcione el script*/
  9.         if (peticion_http.responseText.indexOf("<script>") > -1) {
  10.         var x = peticion_http.responseText.indexOf("<script>") + "<script>".length;
  11.         var y = peticion_http.responseText.indexOf("</script>") - x;
  12.         eval(peticion_http.responseText.substr(x, y));
  13.         }
  14.         }
  15.     }
  16.    
  17.  
  18.     peticion_http.send(null);
  19. }

NOTA: esto solo leerá un bloque de código script, no sirve si haces más de uno, así que deberías poner todos tus scripts dentro del mismo bloque, ejemplo

<script>
var=variabe1;
var=variabe2;
function funcion1(){
}
function funcion2(){
}
function funcion3(){
}
</script>

Emprear, es justamente eso lo que pasa :)
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D

Última edición por stramin; 14/11/2012 a las 10:24
  #8 (permalink)  
Antiguo 14/11/2012, 11:56
 
Fecha de Ingreso: junio-2012
Mensajes: 35
Antigüedad: 11 años, 10 meses
Puntos: 4
Respuesta: No puedo ejecutar scripts con ajax

Pues no funcionó. Lo que no me está cargando es el jquery. Por que cuando crago a parte el html si funciona bien pero si le quito este script <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> reacciona de la misma manera que cando lo llevo con ajax.
  #9 (permalink)  
Antiguo 14/11/2012, 12:03
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: No puedo ejecutar scripts con ajax

ah, eso no lo va a leer, solo va a leer lo que está dentro de <script></script> la llamada al archivo jquery puedes hacerlo en la página principal (en el head)
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #10 (permalink)  
Antiguo 14/11/2012, 12:21
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: No puedo ejecutar scripts con ajax

Cita:
Iniciado por theroutermatic Ver Mensaje
Pues no funcionó. Lo que no me está cargando es el jquery. Por que cuando crago a parte el html si funciona bien pero si le quito este script <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> reacciona de la misma manera que cando lo llevo con ajax.
Utilizá la función cargarRecursos() que te mencioné y carga también de esa manera el jQuery desde el repositorio

SAludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Última edición por emprear; 14/11/2012 a las 12:30
  #11 (permalink)  
Antiguo 14/11/2012, 13:27
 
Fecha de Ingreso: marzo-2010
Ubicación: df
Mensajes: 58
Antigüedad: 14 años, 1 mes
Puntos: 5
Logica equivodada.

Tu tienes el siguiente script:
Código Javascript:
Ver original
  1. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  2. <script src="scripts/jflow.plus.js" type="text/javascript"></script>
  3. <script type="text/javascript">
  4.     $(document).ready(function(){
  5.         $("#myController").jFlow({
  6.             controller: ".jFlowControl", // must be class, use . sign
  7.             slideWrapper : "#jFlowSlider", // must be id, use # sign
  8.             slides: "#mySlides",  // the div where all your sliding divs are nested in
  9.             selectedWrapper: "jFlowSelected",  // just pure text, no sign
  10.             width: "638px",  // this is the width for the content-slider
  11.             height: "311px",  // this is the height for the content-slider
  12.             duration: 400,  // time in miliseconds to transition one slide
  13.             prev: ".jFlowPrev", // must be class, use . sign
  14.             next: ".jFlowNext", // must be class, use . sign
  15.             auto: true 
  16.     });
  17. });
  18. </script>

La funcion $(document).ready(function() solo se ejecuta una vez cuando la pagina este completamente cargada. Ahora, $("#myController") no deberia tener nada dentro ya que su contenido sera cargado DESPUES de que la pagina sea cargada completamente. Por eso no funciona.

Lo que yo hago para asígnar eventos (o codigo javascript) a HTML cargado dinamicamente es lo siguiente.

Código HTML:
Ver original
  1. <!DOCTYPE html>
  2.     <head>
  3.         <title></title>
  4.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5.         <script src="jquery.js" type="text/javascript"></script>
  6.         <script type="text/javascript">
  7.             $(document).ready(function(){
  8.                
  9.                 $('#boton1').click(function(){
  10.                     alert("Soy el boton 1 y mi evento fue asignado dentro de ready");
  11.                 })
  12.                
  13.                 $('#boton2').click(function(){
  14.                     alert("Soy el boton 2 y mi evento no sera asígnado porque todavia no existo");
  15.                 })
  16.                
  17.                 $.ajax({
  18.                     url:'boton2.html',
  19.                     datatype: 'html',
  20.                     success: function(html){
  21.                         $('body').append(html);
  22.                        
  23.                         //Para asignarle un evento al boton 2 descomentar
  24.                         //$('#boton2').click(function(){
  25.                             //alert("Soy el boton 2 y mi evento fue asignado despues de que la solicitud ajax fue exitosa");
  26.                         //})
  27.                     }
  28.                 })
  29.                
  30.             })
  31.         </script>
  32.         <style>
  33.             #boton1{
  34.                 height:50px;
  35.                 width:50px;
  36.                 background-color:red;
  37.             }
  38.             #boton2{
  39.                 height:50px;
  40.                 width:50px;
  41.                 background-color:blue;
  42.             }
  43.         </style>
  44.     </head>
  45.     <body>
  46.         <div id="boton1">boton 1</div>
  47.     </body>
  48. </html>


boton2.html

Código HTML:
Ver original
  1. <div id="boton2">boton 2</div>

Prueba el codigo y estoy seguro que es lo que te pasa.
__________________
Dead Nation
  #12 (permalink)  
Antiguo 15/11/2012, 18:19
 
Fecha de Ingreso: junio-2012
Mensajes: 35
Antigüedad: 11 años, 10 meses
Puntos: 4
De acuerdo Respuesta: Logica equivodada.

Gracias a los 3 por su ayuda. Al final con lo que me dijo stramin y pollin14 llegué a la solución.

Cita:
Iniciado por pollin14 Ver Mensaje
La funcion $(document).ready(function() solo se ejecuta una vez cuando la pagina este completamente cargada. Ahora, $("#myController") no deberia tener nada dentro ya que su contenido sera cargado DESPUES de que la pagina sea cargada completamente. Por eso no funciona.
Cargue las librerias en el index y la pura función me la traje junto con el html ya que como me explicó pollin 14 no funciona si la cargo desde el index.

Y pues me traje solo esa parte del script como lo dijo stramin:

Cita:
Iniciado por stramin Ver Mensaje
Es normal, es por que lo que hace ajax es guardar el contenido de la página en una variable y luego escribe el contenido de esa variable en el documento, por lo tanto los scripts se convierten en solo texto.

por eso lo que se hace es usar esa función que te he puesto más arriba, o sea esta:

if (GET_xmlhttp.responseText.indexOf("<script>") > -1) {
var x = GET_xmlhttp.responseText.indexOf("<script>") + "<script>".length;
var y = GET_xmlhttp.responseText.indexOf("</script>") - x;
eval(GET_xmlhttp.responseText.substr(x, y));
}

dentro de la función ajax y despues del envío del contenido al documento, para que funcione, además debes cambiar este tag:

<script type="text/javascript">

por este:

<script>

y todo funcionará normalmente.
Creí que si cargaba todo en el index no tenia que haber problema. Bueno gracias por su ayuda y su tiempo.

Etiquetas: ajax, funcion, html, scripts
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 16:44.