Me llamo vicente, me gustaría saber si es posible y como, mostrar un reloj o una barra de progreso mientras se carga una página asp, ya que he hecho algunas que tardan un poco y la gente se piensa que no se están cargando.
Si tardan mucho es porque hay algo que no esta bien optimizado. Mejora eso. ¿No te es suficiente con la barra de progreso del navegador?
- Anónimoahora mismo
Respuesta de bobbin
1
1
bobbin, Informática general, especialización en javascript, java, asp, c# y
Lo primero es que sí es posible. Mientras se te carga la página asp puedes hacer lo siguiente con la barra de carga: Dado que la página html ejecutará el javascript que esté fuera de una función según lo recibe, al principio de la página, en javascript, le abres una ventana donde le pones la barra de carga. Puedes encontrar una en www.dynamicdrive.com, y si no te gusta, hacemos una. Después, en la página que tarda mucho en cargar, en ciertos puntos, le pones código javascript para que vaya actualizando la barra de carga, y a volar. Si no te gusta la barra de dynamicdrive o quieres aclarar algo, no dudes en preguntar.
Hola de nuevo, me parecía interesante tu respuesta pero al ponerla en practica me sucede que abre la ventana una vez ha terminado de ejecutar todo el código asp, y eso que he puesto el código javascript para abrir la página al principio del documento, te remito las primeras lineas de código para que veas si he hecho algo mal: " <%@ Language=VBScript %> <script language=javascript> window.open('progreso.html','progreso') </script>" y a partir de aqui viene el resto de codigo de la pagina. como veras la primera linea no es la del javascript, pero esq me daba error si no pongo esta linea la primera del documento. gracias
Se puede resolver metiendo la página en un búfer y forzando a que se vayan enviando los datos. Para ello el código quedaría así: <%@ Language=VBScript%> <% Response.Buffer = true %> <script language=javascript> window.open('progreso.html','progreso') </script> <% Response.Flush %> Response.Buffer se usa para que la salida se introduzca en un búfer. Si se llena, el búfer se vacía solo, pero se puede forzar a vaciarlo con Response.Flush, de forma que cada vez que tengas que actualizar la barra con ponerle esa instrucción después del javascript el navegador la debería ejecutar. Ta luego
Hola, de nuevo, antes que nada agradecerte el tiempo que estas perdiendo conmigo. Bueno he probado lo que me has dicho y sigue haciéndome lo mismo, o sea se pone ha ejecutar el código asp antes que nada, y solo cuando ya ha terminado de realizar todas las consultas que hace con asp, entonces es cuando abre la ventana con el código javascript. Gracias y espero no molestarte demasiado, hasta luego.
¿Podría ver el código si no es mucha indiscreción? Es que no sé por dónde pero se me escapa algo y viendo el código puede ser que saque lo que es.
Aquí tienes el código: ----------------------- <%@ Transaction=required Language=VBScript %> <%Option Explicit%> <!--#INCLUDE FILE="Libreria_funciones.asp"--> <%Response.Buffer = true %> <script language=javascript> window.open('progreso.html','progreso') </script> <% Response.Flush %> <% dim vtotales '--------------Ejecuta funcion situada en "libreria_funciones.asp", que realizar consulta a base------ '--------------de datos y devuelve totales por meses del 2002 en un vector de 1 columna y 12 filas---- '----------------------------------------------------------------------------------------------------- vtotales=asp_consulta_pedidooriginal_importe_per_repres(2002) %> <html> <body> <!--Muestra en una tabla el resultado de la consulta--> <table> <tr> <td>Enero</td> <td>Febrero</td> <td>Marzo</td> <td>Abril</td> <td>Mayo</td> <td>Junio</td> <td>Julio</td> <td>Agosto</td> <td>Septiembre</td> <td>Octubre</td> <td>Noviembre</td> <td>Diciembre</td> </tr> <tr> <td>vtotales(0,0)</td> <td>vtotales(0,1)</td> <td>vtotales(0,2)</td> <td>vtotales(0,3)</td> <td>vtotales(0,4)</td> <td>vtotales(0,5)</td> <td>vtotales(0,6)</td> <td>vtotales(0,7)</td> <td>vtotales(0,8)</td> <td>vtotales(0,9)</td> <td>vtotales(0,10)</td> <td>vtotales(0,11)</td> </tr> </table> </body> </HTML> ------------------------------------- Como ves el código no es muy complicado, lo que pasa es que la consulta tarda unos 7 o 8 segundos en hacerse( esta optimizada al máximo en sql server) , entonces la idea es que muestre una barra de progreso en una ventanita, o incluso con que muestre un gif animado de un reloj moviéndose o algo similar me bastaría. Gracias.
Perdón por la espera, una pregunta más... ¿el servidor iis está en tu máquina? Estuve haciendo pruebas poniéndole un retardo aproximado de unos 10 segundos a base de un bucle, y no me habría la ventana. Al principio pensaba que podría ser por el transaction, pero resultó ser que tenía el servidor iis en la misma máquina que el navegador y al probarlo en otra máquina distinta funcionó. Si es por eso, de todas formas habría que meter en la función llamadas para ir actualizando la página de progreso.