| Portada | Monotemáticos | Secciones | Desarrolladores | Comunidad | Servicios | Servicios profesionales | ||||
Nos ha llegado una consulta interesante que creo que no habíamos tratado con profundidad anteriormente. Se trata del método redirect del objeto response, que en determinadas situaciones da un error, que nos relataba un visitane de la siguiente manera:
Siempre trabaje en win2k e IIS para paginas ASP personales, pero ahora estoy en Win98 con PWS y las paginas que tenia funcionando en IIS con PWS me genera un error el Response.Redirect con el siguiente mensaje de error:
"Los enbezados HTTP ya están escritas en el explorador cliente. Cualquier cambio en el encabezado HTTP se debe hacer antes de escribir el contenido de la página."
Método redirect
Es un método del objeto response y sirve para mandar al navegador a una página que debe indicarse como parámetro. Un ejemplo de utilización sería:
response.redirect "tu_pagina.html"
Esto haría que nuestro navegador se situara en la página tu_pagina.html.
El redirect se realiza enviando en las cabeceras del HTTP la orden de redirección. El caso es que no se puede enviar nada en las cabeceras del HTTP si ya se ha empezado a escribir texto de la página web, aunque sea un simple espacio.
Por tanto, este código es incorrecto:
<head>
<title>Hola</title>
</head>
<%
response.redirect "xxx.asp"
%>
Es incorrecto porque antes de hacer el redirect se ha escrito dentro de la página web, en este caso es información de cabecera, pero esta cabecera del documento HTML no es la mencionada cabecera del HTTP, que la mandan los servidores internamente sin que el programador participe activamente, salvo para introducir información como un redirect o un refresh a partir de funciones ASP.
Almacenamiento en buffer de la página
En instalaciones de ASP a partir de la 3.0 se utiliza un buffer de almacenamiento de la página que tiene como misión ir recogiendo el código HTML resultante de la ejecución de la página ASP, antes de mandarlo al cliente. El buffer se va llenando y cuando termina de ejecutarse la página se manda definitivamente por Internet hasta el ordenador del usuario.
La utilización del buffer en ASP 3.0 (IIS 5.0) se encuentra predeterminada, mientras que en otras versiones de ASP, como la del Personal Web Server (PWS), está predeterminado para no utilizarse.
Según se apunta entonces, en ASP 2.0 y anteriores se va enviando la página al cliente a medida que se va ejecutando y en ASP 3.0 hasta que no se termina de ejecutar entera, la página no se envía al cliente.
Así pues, el código anterior, donde se escribía en la página antes de ejecutar un redirect, aunque está mal diseñado en cualquier caso, puede dar error o puede no dar ningún error. Todo depende de si se había o no enviado texto al cliente previamente a la realización del redirect.
Todo esto tiene mucho que ver con el buffer, pues, si se está utilizando, no se envía nada al cliente y el redirect se realiza sin haber enviado texto, aunque sí se haya escrito en la página. Si no se utiliza el buffer el texto colocado antes del redirect sí se hubiese enviado al cliente y al ejecutar el redirect aparecería el error que nos comentaba nuestro lector.
Utilización o no del buffer
Para indicar que se desea utilizar el buffer hay que escribir esta sentencia al principio del código ASP.
response.buffer = true
Si se coloca en ASP 3.0 no sirve para nada, porque esa opción ya estaba predeterminada. Pero, en cualquier caso, no molesta y nos aseguramos que se utilizará el buffer si las páginas se trasladan a un servidor con ASP 2.0.
Si deseamos hacer un redirect después de haber escrito texto en el buffer, lo correcto sería ejecutar estas dos sentencias juntas:
response.clear
response.redirect "http://www.loquesea.com"
La primera línea indica que se debe vaciar el buffer, con lo que se elimina lo que se haya escrito en la página, y la segunda indica que se haga la redirección. Insisto, esto sólo es posible si se está utilizando el buffer.
| Referencias: La sentencia redirect se utiliza en muchos ejemplos dentro de DesarrolloWeb, pero se explica en el artículo Objeto response. Este artículo se engloba, junto con otros artículos de ASP básicos, en el manual Programación en ASP. |
| Autoría, licencia y acciones sobre este artículo | ||||||
|
Informe de Miguel Angel Alvarez*
Director de DesarrolloWeb.com Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright. * Para consultas técnicas utilizar la lista de correo.
|
| Los comentarios de los visitantes son para ampliar la información del artículo. Cualquiera puede participar. |
| Se muestra un comentario revisado |
RESPUESTA
Redirect en ASP no te va a servir si quieres redireccionar otro frame. Lo tendrías que hacer mediante Javascript.
Para redireccionar con Javascript tienes la sentencia window.location="nueva_url". Pero si deseas redireccionar otro de los frames de la página, primero tienes que hacer referencia al frame en concreto que quieres cambiar.
Para saber cómo referenciar y trabajar con distintos frames en Javascript, te recomiendo la lectura del manual Control de frames con Javascript.
| Añadir un comentario del artículo |
| Comentarios sin revisar |
| Entre los comentarios no revisados puede haber algunos interesantes que se hayan enviado recientemente. |
| Ver los comentarios no revisados |
| Añadir un comentario del artículo |
| Enlaces: |
| Maestrosdelweb |
Lectura recomendada Compra este libro en Agapea, la librería urgente a domicilio. |
||||||||||
Tienda DesarrolloWeb