Retroceder   Foros del Web > Programación para sitios web > AJAX

Respuesta
 
Herramientas Desplegado
Antiguo 30-mar-2007, 16:30   #1 (permalink)
erlingfiallos está en el buen camino
 
Avatar de erlingfiallos
 
Fecha de Ingreso: febrero-2005
Ubicación: Mexico ahora
Mensajes: 324
Enviar un mensaje por MSN a erlingfiallos Enviar un mensaje por Skype™ a erlingfiallos
Idea sobre ajax, porque no lo hace ?

Alguien sabe porque cuando se regresa un request con ajax y dentro de ese request va algun codigo de javascript como un alert('hola'), este no se ejecuta ???
__________________
Jack Fiallos (AkKa Erling)
Vive e sonha quem morre e não ao duer a mim
Jack Fiallos WebBlog
erlingfiallos está desconectado   Responder Citando
Antiguo 31-mar-2007, 03:12   #2 (permalink)
Moderata
JavierB es realmente agradableJavierB es realmente agradableJavierB es realmente agradableJavierB es realmente agradableJavierB es realmente agradableJavierB es realmente agradable
 
Avatar de JavierB
 
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 19.552
Re: sobre ajax, porque no lo hace ?

Hola erlingfiallos

Esto te lo contestarán mejor en el foro de AJAX.

Movido desde JavaScript.

Saludos,
__________________
Lee las Políticas de los foros y escribe correctamente.
JavierB está desconectado   Responder Citando
Antiguo 01-abr-2007, 10:30   #3 (permalink)
erlingfiallos está en el buen camino
 
Avatar de erlingfiallos
 
Fecha de Ingreso: febrero-2005
Ubicación: Mexico ahora
Mensajes: 324
Enviar un mensaje por MSN a erlingfiallos Enviar un mensaje por Skype™ a erlingfiallos
Re: sobre ajax, porque no lo hace ?

Nadie tiene al menos una idea remota de como hacer funcionar un script regresado por un ajax entonces ??
__________________
Jack Fiallos (AkKa Erling)
Vive e sonha quem morre e não ao duer a mim
Jack Fiallos WebBlog
erlingfiallos está desconectado   Responder Citando
Antiguo 01-abr-2007, 11:16   #4 (permalink)
demiurgo_daemon ha deshabilitado el karma
 
Avatar de demiurgo_daemon
 
Fecha de Ingreso: diciembre-2006
Ubicación: Querétaro
Mensajes: 184
Re: sobre ajax, porque no lo hace ?

hola,

antes que nada déjame ver si te entiendo:

recibes una respuesta AJAX que contiene, por ejemplo:

Código:
ajax = "alert('hola')";
y quieres ejecutar eso.

Puedes intentarlo con eval:
Código:
eval(ajax);
es lo mismo que

Código:
eval("alert('hola')");
Ahora bien, no sé qué tan seguro sea recibir código ejecutable mediante AJAX, tal vez quieras pensar en otra implementación.

saludos
demiurgo_daemon está desconectado   Responder Citando
Antiguo 03-abr-2007, 11:17   #5 (permalink)
erlingfiallos está en el buen camino
 
Avatar de erlingfiallos
 
Fecha de Ingreso: febrero-2005
Ubicación: Mexico ahora
Mensajes: 324
Enviar un mensaje por MSN a erlingfiallos Enviar un mensaje por Skype™ a erlingfiallos
Re: sobre ajax, porque no lo hace ?

mmm..!!

sigue sin funcionar..

lo que quiero hacer es mandar datos a una pagina y recibir la respuesta mediante ajax.. ahora lo mas interesante es que la respuesta de ajax contenga codigo javascript que me permita ejecutar funciones.

Por ej..
Envio datos a procesar.php y este regresa un mensaje, lo que trato de hacer es que el mensaje que me regresa procesar.php aparezca usando un efecto de moo.fx

Lo malo es que no se porq ajax no ejecuta codigo javascript, incluso le digo a procesar.php que regrese esto y no pasa nada.

$output = '<script language="Javascript">eval(\'alert("Hola")\');</script>';

entonces ajax escribe

<script language="Javascript">eval('alert("Hola")');</script>

pero nunca se ejecuto ese script
__________________
Jack Fiallos (AkKa Erling)
Vive e sonha quem morre e não ao duer a mim
Jack Fiallos WebBlog
erlingfiallos está desconectado   Responder Citando
Antiguo 03-abr-2007, 13:49   #6 (permalink)
MaBoRaK llegará a ser famoso muy prontoMaBoRaK llegará a ser famoso muy pronto
 
Avatar de MaBoRaK
 
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 1.765
Enviar un mensaje por MSN a MaBoRaK
Re: sobre ajax, porque no lo hace ?

loading............


podrias ILUSTRARNOS el como quieres evaluar tu javascript?
y como te dijeron si recibes el texto

Código PHP:
var larespuestaajax"alert('asdadasd');"
y luego haces

Código PHP:
eval (larespuestaajax); 
TIENE QUE FUNCIONAR;

connection closed.
__________________
maborak@maborak.com
http://www.maborak.com
Maborak technologies
MaBoRaK está desconectado   Responder Citando
Antiguo 03-abr-2007, 16:52   #7 (permalink)
erlingfiallos está en el buen camino
 
Avatar de erlingfiallos
 
Fecha de Ingreso: febrero-2005
Ubicación: Mexico ahora
Mensajes: 324
Enviar un mensaje por MSN a erlingfiallos Enviar un mensaje por Skype™ a erlingfiallos
Re: sobre ajax, porque no lo hace ?

pues ninguna llamada a un script ha funcionado hasta el momento.. pense que sabia JScript hasta este momento que me quede pegao en el tema..

Pero bueno, asi como han escrito el eval deberia de mostrarme el alert que se regresa mediante el ajax.. la cosa es que no lo hace..

Cualquier tipo de script que deba regresar con ajax lo omite y no lo ejecuta.. mi pregunta es que si saben el porque pasa esto o como se puede solucionar..

Y claro que podria hacerlo si modificara mi libreria de ajax, solo seria cosa de ponerle algo de codigo en evento onreadystatechange, pero el caso es que no quiero hacerlo porq mi libreria no debe de ser especificamente solo para imprimir mensajillos con efectos de la libreria moo.fx.

En si lo que quiero hacer se puede.. pienso yo.. pero debe de haber alguna forma de ejecutar codigo de javascript regresado en un ajax.
__________________
Jack Fiallos (AkKa Erling)
Vive e sonha quem morre e não ao duer a mim
Jack Fiallos WebBlog
erlingfiallos está desconectado   Responder Citando
Antiguo 03-abr-2007, 18:29   #8 (permalink)
MaBoRaK llegará a ser famoso muy prontoMaBoRaK llegará a ser famoso muy pronto
 
Avatar de MaBoRaK
 
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 1.765
Enviar un mensaje por MSN a MaBoRaK
Re: sobre ajax, porque no lo hace ?

loading..........


un intento mas:

y si haces:

Código PHP:
eval("var algo="+larespuestaajax);
alert(algo); 
debería darte como resultado un objeto

Sino, usa JSON del lado de javascript para convertir esa cadena en un objeto.

www.json.org



connection closed.
__________________
maborak@maborak.com
http://www.maborak.com
Maborak technologies
MaBoRaK está desconectado   Responder Citando
Antiguo 03-abr-2007, 20:15   #9 (permalink)
erlingfiallos está en el buen camino
 
Avatar de erlingfiallos
 
Fecha de Ingreso: febrero-2005
Ubicación: Mexico ahora
Mensajes: 324
Enviar un mensaje por MSN a erlingfiallos Enviar un mensaje por Skype™ a erlingfiallos
Re: sobre ajax, porque no lo hace ?

Esto se me hace chistoso.. porque sigue sin funcionar.. desconozco la razon por la cual no me permita hacer lo que quiero..

y pues un intento mas que no ha funcionado.. ahora vere si con json puedo lograrlo..
__________________
Jack Fiallos (AkKa Erling)
Vive e sonha quem morre e não ao duer a mim
Jack Fiallos WebBlog
erlingfiallos está desconectado   Responder Citando
Antiguo 03-abr-2007, 20:55   #10 (permalink)
erlingfiallos está en el buen camino
 
Avatar de erlingfiallos
 
Fecha de Ingreso: febrero-2005
Ubicación: Mexico ahora
Mensajes: 324
Enviar un mensaje por MSN a erlingfiallos Enviar un mensaje por Skype™ a erlingfiallos
Re: sobre ajax, porque no lo hace ?

Esto se me hace chistoso.. porque sigue sin funcionar.. desconozco la razon por la cual no me permita hacer lo que quiero.. ahora posteare un ultrasuperlight ejemplo que hice.. unicamente son 2 archivos..

archivo ejemplo.php
Código PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<
html>
    <
head>
        <
meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <
script type="text/javascript" src="http://jack.xtremdesign.net/blog/bblog/blogfiles/ajaxdcod.js"></script>
        <script type="text/javascript" src="http://jack.xtremdesign.net/blog/bblog/blogfiles/json.js"></script>
        <script language='javascript'>
        var yo = {
              nombre: "Jack",          
              saludar: function() {
                  return "Coño.. porque no funcionas.";
              }
          };
          alert(yo.saludar());
          </script>
    </head>
<body>
<a href="javascript:void(0)" onclick="javascript:MakeRequest('get', 'post.php', 'numero=1&cadena=Jack&booleano=true', 'resplace');">Click para enviar llamado</a><br /><br />
<div id="resplace" name="resplace"></div>
</body>
</html> 
archivo post.php
Código PHP:
<?php
echo "<pre>";
print_r($_GET);
echo 
"</pre>";

echo 
"<script language='javascript'>
    var yo = {
              nombre: 'Jack',          
              saludar: function() {
                  return 'Coño.. porque no funcionas.';
              }
          };
          alert(yo.saludar());
    </script>"
;
?>
como veran las librerias tanto de ajax como de json ya estan incluidas con toda su ruta completa.. en el post.php lo que hago es supuestamente enviar la impresion de un alert.. lo cual no lo hace.. en ejemplo esta misma funcion la uso y funciona de maravilla.. pero al regresarla con ajax.. no pela para nada.. para quienes usen firefox y tengan instalado firebug.. veran como ajax regresa todo el codigo tal y como esta en el archivo post.php.. pero no ejecuta nada..

QUE SERA ?????
__________________
Jack Fiallos (AkKa Erling)
Vive e sonha quem morre e não ao duer a mim
Jack Fiallos WebBlog
erlingfiallos está desconectado   Responder Citando
Antiguo 04-abr-2007, 11:27   #11 (permalink)
erlingfiallos está en el buen camino
 
Avatar de erlingfiallos
 
Fecha de Ingreso: febrero-2005
Ubicación: Mexico ahora
Mensajes: 324
Enviar un mensaje por MSN a erlingfiallos Enviar un mensaje por Skype™ a erlingfiallos
Re: sobre ajax, porque no lo hace ?

Por lo visto nadie tuvo solucion a esto.. entonces les explicare brevemente porque pasa eso..

Segun encontre cualquier tipo de script que venga en la respuesta de un ajax no se ejecutara por motivos de seguridad por lo cual hay que parsear la respuesta en busca de scripts y luego ejecutarlos pero desde la aplicacion que usa el ajax.. se ve algo complejo.. pero no lo es tanto asi..

var scripts = document.getElementById('contenedorajax').innerHTM L;
scripts = script.extractScripts();

esto existe y es para encontrar todos los javascript incluidos en una pagina

ahora para ejecutar los script

window.execScript(scripts);

esto no termina aqui, ya que debe de haber un ciclo for para obtener el numero de scripts encontrados y dentro de ese for hacer que se ejecuten.. cuando lo termine se los posteare para que vean como ha quedado.
__________________
Jack Fiallos (AkKa Erling)
Vive e sonha quem morre e não ao duer a mim
Jack Fiallos WebBlog
erlingfiallos está desconectado   Responder Citando
Antiguo 09-abr-2007, 11:49   #12 (permalink)
erlingfiallos está en el buen camino
 
Avatar de erlingfiallos
 
Fecha de Ingreso: febrero-2005
Ubicación: Mexico ahora
Mensajes: 324
Enviar un mensaje por MSN a erlingfiallos Enviar un mensaje por Skype™ a erlingfiallos
Re: sobre ajax, porque no lo hace ?

Y pues como lo habia prometido, lo que estuve intentando hacer la semana pasada ya esta completamente funcional, al fin supe ejecutar scripts enviados en un request para ajax.. y el codigo es el siguiente.. no puse todo el codigo, pero ahi esta lo mas importante..

Código:
// se guarda la respuesta pedida mediante ajax
result = http_request.responseText;
// cargo en mi elemento destino la respuesta
document.getElementById(elemento_res).innerHTML = result;
// ahora en busca de scripts para ser ejecutados
buscarscripts(elemento_res);

function buscarscripts(elemento_res) {
	var script = document.getElementById(elemento_res).innerHTML;
	script = script.extractScripts();
	for(i=0;i<script.length;i++)
		instalar(script[i]);
}

function instalar(script) {
	script = script.replace("<!--","");
	script = script.replace("//-->","");
	if (window.execScript)
		window.execScript(script);
	else
		window.setTimeout(script, 0);
}
__________________
Jack Fiallos (AkKa Erling)
Vive e sonha quem morre e não ao duer a mim
Jack Fiallos WebBlog
erlingfiallos está desconectado   Responder Citando
Antiguo 10-abr-2007, 12:20   #13 (permalink)
MaBoRaK llegará a ser famoso muy prontoMaBoRaK llegará a ser famoso muy pronto
 
Avatar de MaBoRaK
 
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 1.765
Enviar un mensaje por MSN a MaBoRaK
Re: sobre ajax, porque no lo hace ?

loading............

Eso no es Crossbrowser supongo.

connection closed.
__________________
maborak@maborak.com
http://www.maborak.com
Maborak technologies
MaBoRaK está desconectado   Responder Citando
Antiguo 10-abr-2007, 15:38   #14 (permalink)
erlingfiallos está en el buen camino
 
Avatar de erlingfiallos
 
Fecha de Ingreso: febrero-2005
Ubicación: Mexico ahora
Mensajes: 324
Enviar un mensaje por MSN a erlingfiallos Enviar un mensaje por Skype™ a erlingfiallos
Re: sobre ajax, porque no lo hace ?

las funciones que ven como el extractScripts() y el execScript() son totalmente crossbrowser aunque tienen ciertos problemas con el parseo de algunas etiquetas como el src.. pero en delante son parte de un estandar segun lei.. ahora.. no solo estas funciones se pueden utilizar.. tambien encontre que prototype tiene las mismas funciones implementadas de forma diferente dando el mismo resultado.. por si no funciona una funciona la otra..
__________________
Jack Fiallos (AkKa Erling)
Vive e sonha quem morre e não ao duer a mim
Jack Fiallos WebBlog
erlingfiallos está desconectado   Responder Citando
Antiguo 17-abr-2007, 02:16   #15 (permalink)
bichomen está en el buen camino
 
Avatar de bichomen
 
Fecha de Ingreso: junio-2003
Ubicación: Barcelona
Mensajes: 738
Re: sobre ajax, porque no lo hace ?

Cita:
Iniciado por erlingfiallos Ver Mensaje
Y pues como lo habia prometido, lo que estuve intentando hacer la semana pasada ya esta completamente funcional, al fin supe ejecutar scripts enviados en un request para ajax.. y el codigo es el siguiente.. no puse todo el codigo, pero ahi esta lo mas importante..

Código:
// se guarda la respuesta pedida mediante ajax
result = http_request.responseText;
// cargo en mi elemento destino la respuesta
document.getElementById(elemento_res).innerHTML = result;
// ahora en busca de scripts para ser ejecutados
buscarscripts(elemento_res);

function buscarscripts(elemento_res) {
	var script = document.getElementById(elemento_res).innerHTML;
	script = script.extractScripts();
	for(i=0;i<script.length;i++)
		instalar(script[i]);
}

function instalar(script) {
	script = script.replace("<!--","");
	script = script.replace("//-->","");
	if (window.execScript)
		window.execScript(script);
	else
		window.setTimeout(script, 0);
}
Para los que somos un poco mas torpes, podrias poner un ejemplo funcional, con todo su codigo, gracias

bichomen
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332
bichomen está desconectado   Responder Citando
Antiguo 23-abr-2007, 09:22   #16 (permalink)
m4ur1c10 ha deshabilitado el karma
 
Fecha de Ingreso: octubre-2005
Mensajes: 2
Gracias


Tenia el mismo problema cuando queria procesar un formulario con un action del tipo (javascript:consultar()). Que me servia cuando lo procesaba directamente a traves de URL pero cuando lo cargaba en un div contenedor me salia un error de objeto inexistente en javascript. Como me temia y como me lo confirmaste el problema era el procesar codigo javascript en un request.
Gracias por la solucion.
m4ur1c10 está desconectado   Responder Citando
Antiguo 23-abr-2007, 10:25   #17 (permalink)
erlingfiallos está en el buen camino
 
Avatar de erlingfiallos
 
Fecha de Ingreso: febrero-2005
Ubicación: Mexico ahora
Mensajes: 324
Enviar un mensaje por MSN a erlingfiallos Enviar un mensaje por Skype™ a erlingfiallos
Re: sobre ajax, porque no lo hace ?

Aqui les dejo el funcionamiento de javascript con ajax.

Se crean el archivo ejemplo.php y el archivo proc.php y pegan sus respectivos codigos, incluyo una funcion que he estado haciendo para el uso de ajax que se llama MakeRequest, esta de mas explicar como funciona.. la pagina proc.php responde con un arreglo de las variables enviadas desde ejemplo.php usando GET y tambien imprime un pequeño script alert. Hasta aqui todo funciona bien y cuando hacen click sobre el link que puse en la pagina ejemplo.php veran impreso el arreglo de variables y el mensaje de "Hola mundo.." como alert. Ahora en la funcion MakeRequest si comentan donde dice "buscarscripts(elemento_res);" el alert ya no aparecera.. ese es el problema o duda que se habia tenido hasta el momento.

Para poder usar la funcion buscarscripts() hay que tener incluida la libreria de prototype y yo lo tome directamente desde la pagina web, por si alguno no la tiene. Si hay dudas aqui seguimos para aclararlas..

Suerte..

ejemplo.php
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>
<title>Cargar JavaScript con Ajax</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="http://www.prototypejs.org/javascripts/prototype.js" type="text/javascript"></script>
<style type="text/css">
/*<![CDATA[*/
	body {font-family: Arial, Helvetica, sans-serif;font-size: 13px;color: #404040;font-weight: bold;}
/*]]>*/
</style>
<script language="JavaScript">
//<![CDATA[
	var http_request = false;   
	   
	function MakeRequest(metodo, url, parametros, elemento_res) {
		http_request = false;
		if (window.XMLHttpRequest) { // Mozilla, Safari,...
			http_request = new XMLHttpRequest();
			if (http_request.overrideMimeType) {
				// se anticipa a que el tipo regresaro sera un mime ('text/xml');
				http_request.overrideMimeType('text/html');
			}
		} else if (window.ActiveXObject) { // IE
			try {
				http_request = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {}
			}
		}
		if (!http_request) {
			alert('No se puedo crear una instancia de XMLHTTP');
			return false;
		}
	  
		if (metodo == 'post') {
			http_request.open('POST', url, true);
			http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			http_request.setRequestHeader("Content-length", parametros.length);      	
		}
		else {
			http_request.open('GET', url+"?"+parametros, true);
			http_request.setRequestHeader("Content-type", "text/html");
			http_request.setRequestHeader("Content-length", parametros.length);
		}
		http_request.setRequestHeader("Connection", "close");
		http_request.send(parametros);
		http_request.onreadystatechange = function() {			
			if (http_request.readyState == 4) {
				if (http_request.status == 200) {
					result = http_request.responseText;
					document.getElementById(elemento_res).innerHTML = result;
					buscarscripts(elemento_res);
				} else {
					alert('Error al hacer request.');
				}
			}
			else {
				document.getElementById(elemento_res).innerHTML = "Cargando...";
			}
		}
	}
	   
	function getdata(frm) {
		var parametros = '';		
		for (i=0; i<=document.getElementById(frm).elements.length-1; i++) {  			
			elemento = document.getElementById(frm).elements[i];
			if (elemento.type != 'submit')
				parametros = parametros + elemento.id+"="+elemento.value+"&";			
		}
		parametros = parametros.substring(0,parametros.length-1);
		return parametros;		
	}
	
	function buscarscripts(elemento_res) {
		var script = document.getElementById(elemento_res).innerHTML;
		script = script.extractScripts();
		for(i=0;i<script.length;i++)
			instalar(script[i]);
	}
	
	function instalar(script) {
		script = script.replace("<!--","");
		script = script.replace("//-->","");
		if (window.execScript)
			window.execScript(script);
		else
			window.setTimeout(script, 0);
	}
//]]>
</script>
</head>
<body>
	<h2>Cargar usando GET</h2>
	<a href="javascript:void(0)" onclick="javascript:MakeRequest('get', 'proc.php', 'valor0=ajax&valor1=web2.0&valor3=javascript', 'respuesta');">Click aqui</a><br />
	<div id="respuesta" name="respuesta"></div>
</body>
</html>
proc.php
Código PHP:
<?php
echo "<pre>";
print_r($_GET);
echo 
"</pre>";

echo 
"<script>";
echo 
"alert('Hola mundo');";
echo 
"</script>";
?>
__________________
Jack Fiallos (AkKa Erling)
Vive e sonha quem morre e não ao duer a mim
Jack Fiallos WebBlog
erlingfiallos está desconectado   Responder Citando
Antiguo 24-abr-2007, 01:53   #18 (permalink)
bichomen está en el buen camino
 
Avatar de bichomen
 
Fecha de Ingreso: junio-2003
Ubicación: Barcelona
Mensajes: 738
Re: sobre ajax, porque no lo hace ?

Donde llamas a la funcion:

Código:
getdata(frm);
y supongo que le pasas el

Código:
elemento_res

getdata(elemento_res);

bichomen
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332
bichomen está desconectado   Responder Citando
Antiguo 25-abr-2007, 15:21   #19 (permalink)
erlingfiallos está en el buen camino
 
Avatar de erlingfiallos
 
Fecha de Ingreso: febrero-2005
Ubicación: Mexico ahora
Mensajes: 324
Enviar un mensaje por MSN a erlingfiallos Enviar un mensaje por Skype™ a erlingfiallos
Re: sobre ajax, porque no lo hace ?

Bueno, no quize explicar todo el codigo para no hacerlo mas complejo, pero la funcion getdata() la uso cuando envio datos por el POST usando un formulario.. Si ven bien lo que hace esta funcion es leer todos los elementos que estan dentro de un form y armar una cadena donde se contatena el id del control y su valor.. lo que retorna es la cadena parecida a las que se pasan por la url. Esta funcion sigue en desarrollo y optimizacion. Si alguien tiene una idea de mejorar la funcion, pues bienvenido sea.
__________________
Jack Fiallos (AkKa Erling)
Vive e sonha quem morre e não ao duer a mim
Jack Fiallos WebBlog
erlingfiallos está desconectado   Responder Citando
Antiguo 27-abr-2007, 09:28   #20 (permalink)
Daca tiene algunos puntos positivos de karma
 
Fecha de Ingreso: julio-2003
Mensajes: 141
Re: sobre ajax, porque no lo hace ?