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

Combos enlazados y JavaScript en la página cargada

Estas en el tema de Combos enlazados y JavaScript en la página cargada en el foro de Frameworks JS en Foros del Web. Buenas: Llevo tiempo mirando el foro y buscando tutoriales sobre AJAX, y creo que ya me va entrando en la cabeza :P. Estoy empezando una ...
  #1 (permalink)  
Antiguo 26/10/2005, 02:44
 
Fecha de Ingreso: octubre-2004
Mensajes: 104
Antigüedad: 20 años, 1 mes
Puntos: 0
Combos enlazados y JavaScript en la página cargada

Buenas:

Llevo tiempo mirando el foro y buscando tutoriales sobre AJAX, y creo que ya me va entrando en la cabeza :P.

Estoy empezando una aplicación y he decidido probar a implementar el AJAX a ver si me puede dar toda la funcionalidad que quiero, y me he encontrado de momento un par de problemas:

- El primero es sobre los combos enlazados (combos que se van cargando según datos de los combos anteriores). He visto en una página un ejemplo de cómo lo hacía, y era redibujando el contenido de la celda que tenia el combo, de manera que lo volvía a crear. Mi duda es saber si se puede hacer de manera que no se redibuje el combo entero, sino que teniendo el combo hecho, se juegue con los option que tiene (añadir, eliminar, editar...).

- El segundo problema que me he encontrado es a la hora de utilizar JavaScript en la página que cargo a través del XMLHttpRequest. He probado a llamar desde dentro de esa página a una función definida en ésta y me da error. No he visto ningún post al respecto, así que escribo a ver si a alguien le ha ocurrido algo parecido.

Por cierto, utilizo ASP para trabajar del lado del servidor, lo digo a nivel informativo únicamente :P.

Un saludo y gracias
  #2 (permalink)  
Antiguo 26/10/2005, 05:08
Avatar de Viet  
Fecha de Ingreso: octubre-2003
Ubicación: Mar del Plata - Argentina
Mensajes: 247
Antigüedad: 21 años, 2 meses
Puntos: 2
Buenas : el primer problema lo puedes resolver con un div que englobe el select del combo y asignarle en el innerHTML el combo nuevo cuando lo quieres redibujar.

El segundo: que error te da?, como lo llamas?
__________________
Keep it simple and keep it fast.
  #3 (permalink)  
Antiguo 26/10/2005, 07:48
 
Fecha de Ingreso: octubre-2004
Mensajes: 104
Antigüedad: 20 años, 1 mes
Puntos: 0
Me da error como si no detectara absolutamente nada de javascript. Por ejemplo si declaro una variable y luego la imprimo con un alert, me dice que la variable no esta definida. Te pongo el ejemplo:

Código:
<%
	Response.Write "<html>"
		Response.Write "<head>"
		Response.Write "</head>"
		Response.Write "<body>"
			Response.Write "<script language='javascript'>"
				Response.Write "var variable1 = 'aaaa';"
				Response.Write "function pulsar()"
				Response.Write "{"
					Response.Write "alert(toma ya!');"
				Response.Write "}"
			Response.Write "</script>"
			Response.Write "<input type='button' name='botonpulsar' onClick='alert(variable1); pulsar();' value='Pulsa'>"
		Response.Write "</body>"
	Response.Write "</html>"
%>
Esta es la página que se carga en un div por medio del XMLHttpRequest, y ni me imprime la variable porque dice que no está definida, ni me hace el alert de la función pulsar ni nada.
  #4 (permalink)  
Antiguo 26/10/2005, 08:21
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
y porque retornas solo la función de js y en el responseText del ajax lo pasas por un eval() y listo..... asi lo tengo yo en mi clase ajax y me funciona bien. o sea, que puedo mandarle codigo js y me lo ejecute cuando retorne....

espero te ayude en algo
__________________
Saruman

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them.
  #5 (permalink)  
Antiguo 26/10/2005, 08:53
Avatar de Viet  
Fecha de Ingreso: octubre-2003
Ubicación: Mar del Plata - Argentina
Mensajes: 247
Antigüedad: 21 años, 2 meses
Puntos: 2
Tambien tene en cuenta que tu funcion no espera parametros y le estas pasando el la variable... por eso no ejecuta nada... porque no lo compila....

Yo que vos usaria la consola de java para ver el error ...
__________________
Keep it simple and keep it fast.
  #6 (permalink)  
Antiguo 26/10/2005, 10:00
 
Fecha de Ingreso: octubre-2004
Mensajes: 104
Antigüedad: 20 años, 1 mes
Puntos: 0
Viet, donde le paso un parametro a la función? a la que le paso el parámetro es al alert.

Saruman lo del eval() no lo he entendido muy bien, si me pusieras un ejemplo te lo agradeceria :P.

Gracias por las respuestas
  #7 (permalink)  
Antiguo 26/10/2005, 13:30
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
cool, no problem.

en tu ASP haces esto:

response.write("alert('Hola mundo')")

y en el ajax script section pones esto:

var mivariable = objeto.responseText;
eval(mivariable);

y listo.

cualquier cosa me avisas ok?

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.
  #8 (permalink)  
Antiguo 27/10/2005, 00:47
 
Fecha de Ingreso: octubre-2004
Mensajes: 104
Antigüedad: 20 años, 1 mes
Puntos: 0
Mmm vale, lo entiendo, pero eso solo me valdría si la página que cargase fuera un .js al completo, porque si hago el eval() de toda la página ASP me da todo tipo de errores de sintaxis (porque a parte del javascript, tambien hay código html).

Lo que he visto en alguna página es hacer un .js por cada página que vayas a cargar, pero me parece un coñazo impresionante.

Gracias de nuevo
  #9 (permalink)  
Antiguo 27/10/2005, 04:50
 
Fecha de Ingreso: octubre-2004
Mensajes: 104
Antigüedad: 20 años, 1 mes
Puntos: 0
He probado una cosa y funciona, pero me gustaría que me dierais vuestra opinión:

A la hora de cargar la pagina ASP en el XMLHttpObject, busco en todo el contenido de esa página, los bloques <script language='javascript'>...</script>. Y cada vez que encuentra uno, a través del DOM, lo meto en la etiqueta <head> de la página principal (la que tiene la capa contenedora). No es muy ortodoxo pero me funciona a la perfección.

Os explico un poco el contexto. En sí es un menú de una aplicación y quiero que el acceso a cualquier parte sea con AJAX; con lo que la página principal tiene el menú y la capa contenedora, donde cargaría todas las páginas ASP de cada opción del menú.

Volviendo al tema, las dos únicas pegas que le encuentro son:

- Que en la etiqueta <head> de la página principal no puedo meter ningun script de javascript (así que los meto en el body).
- La otra pega es que cada vez que pinche en una opción y actúe el AJAX, tengo que limpiar todas los scripts de la etiqueta <head> antes de cargar la nueva página.

Os dejo el código del Javascript por si le queréis echar un vistazo, me gustaría conocer opiniones :P.

Código:
function cargarContenido(url, parametros)
{
	var cadena;
	var aperturascript = "<script language='javascript'>";
	var cierrescript = "</script>";
	var x;
	var cabecerapagina = document.getElementsByTagName('head')[0];
	
	//Limpiamos los scripts de la cabecera
	x = 0;
	while (cabecerapagina.childNodes[x])
	{
		if (cabecerapagina.childNodes[x].tagName.toUpperCase() == 'SCRIPT')
		{
			cabecerapagina.removeChild(cabecerapagina.childNodes[x]);
		}
		else
		{
			x++;
		}
	} 
	////

	ajax = nuevoAjax();
	url = url + parametros;
	ajax.open("GET", url,true);
	ajax.onreadystatechange = function()
		{
			if (ajax.readyState==4)
			{
				cadena = ajax.responseText;
				contenidopagina = cadena;			//Metemos en una variable el contenido entero de la página puesto que jugaremos con la variable "cadena" despues
				
				while (cadena.indexOf(aperturascript) != -1 && cadena.indexOf(cierrescript) != -1)
				{
					var script_pagina = document.createElement('script');
					script_pagina.setAttribute('type', 'text/javascript');
					script_pagina.text = cadena.substring(cadena.indexOf(aperturascript) + aperturascript.length, cadena.indexOf(cierrescript))
					cabecerapagina.appendChild(script_pagina);
					
					cadena = cadena.substring(cadena.indexOf(cierrescript) + cierrescript.length);
				}
				contenedor.innerHTML = contenidopagina;
			}
		}
	ajax.send(null)
}
Un saludo
  #10 (permalink)  
Antiguo 27/10/2005, 09:22
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
una pregunta... para que necesitas hacer/remover tantos scripts js??
__________________
Saruman

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them.
  #11 (permalink)  
Antiguo 27/10/2005, 09:27
 
Fecha de Ingreso: octubre-2004
Mensajes: 104
Antigüedad: 20 años, 1 mes
Puntos: 0
Pues porque trato de hacer una aplicación que necesita mucho formulario, validación y demás, y casi todas las páginas suelen tener algo de javascript.
  #12 (permalink)  
Antiguo 27/10/2005, 10:02
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
pero porque solamente no usas ajax para lo que es guardar y esas cosas y las demas validaciones las haces con el propio JS??
ok, se que en el mismo script puede que te retorne algo, por ejemplo si estas trabajando con usuarios (registro) y quieres mandarle un mensaje al usuario d que el nombre de usuario que quiere utilizar ya existe y ese tipo de cosas, pero esas cositas las puedes hacer cuando te retorna el responseText del propio ajax... tendrias que jugar con lo que te trae....
por ejemplo, yo hice mi formulario de registro de usuarios casualmente anoche y si el usuario existe le mando un response.write("[ERROR]el usuario ya existe")... por decir algo en ASP y en el obj.responseText hago como quien dice un indexOf("[ERROR]")... si existe entonces le mando ese mensaje al usuario y si todo salio bien entonces continuo.... captas??

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.
  #13 (permalink)  
Antiguo 27/10/2005, 10:33
 
Fecha de Ingreso: octubre-2004
Mensajes: 104
Antigüedad: 20 años, 1 mes
Puntos: 0
No se me había ocurrido la verdad, a ver si tengo tiempo y lo pruebo con algún formulario. El problema es que no sólo serían validaciones a la hora de enviar la información al servidor, sino que también las suelo hacer en javascript en la propia página (un onkeypress para que metan solo números, una función que me compare las fechas y me diga cual es mayor para dejarle o no dejarle seguir...), no se si sabes a qué me refiero.

Lo que se me ocurre ahora, es que esas funciónes de validación en el momento las podría meter todas en un mismo .js y cargar éste al inicio de la página principal.

No sé si será suficiente con estas dos formas para todo lo que necesito hacer en la aplicación, ya os contaré más problemas, seguro. De todas maneras muchas gracias saruman :P.

Si alguien encuentra otra solución será bien recibida
  #14 (permalink)  
Antiguo 27/10/2005, 12:04
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 PosDon
Lo que se me ocurre ahora, es que esas funciónes de validación en el momento las podría meter todas en un mismo .js y cargar éste al inicio de la página principal.
EXACTO!!
eso mismo.... esas cositas como validar integridad en los datos (inputs) que solo metan numero donde tenga que ir... email validos, etc... eso es con JS... lo demas, la parte del server, con mi estimado AJAX y te liberas de muchos dolres de kbeza

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.
  #15 (permalink)  
Antiguo 27/10/2005, 13:57
Avatar de Viet  
Fecha de Ingreso: octubre-2003
Ubicación: Mar del Plata - Argentina
Mensajes: 247
Antigüedad: 21 años, 2 meses
Puntos: 2
Otra cosa... no te olvides que una de las principales ventajas de ajax es no tener que hacer y enviar toda la pagina desde el server al browser... por ende trata de solo responder desde asp lo que debas actulizar y ponlo en un div dentro del la pagina resultante...pero no reenvies todo el html desde el header


saludos
__________________
Keep it simple and keep it fast.
  #16 (permalink)  
Antiguo 27/10/2005, 14:19
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 Viet
Otra cosa... no te olvides que una de las principales ventajas de ajax es no tener que hacer y enviar toda la pagina desde el server al browser... por ende trata de solo responder desde asp lo que debas actulizar y ponlo en un div dentro del la pagina resultante...pero no reenvies todo el html desde el header
eso es correcto
__________________
Saruman

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them.
  #17 (permalink)  
Antiguo 28/10/2005, 00:13
 
Fecha de Ingreso: octubre-2004
Mensajes: 104
Antigüedad: 20 años, 1 mes
Puntos: 0
Sí, si precisamente eso es lo que trato de conseguir, lo que pasa es que antes lo hacía mediante iframes y quería probar a ver si podía conseguir lo mismo mediante AJAX, ya voy teniendo más claras las cosas.

Gracias a los dos
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 11:14.