2012-07-02 5 views
5

Tengo el siguiente código php que quiero añadir un retardo demasiado:cabecera retraso ubicación

<?php 
    echo "Message has been sent."; 
    header("Location: page2.php", true, 303); 
    exit; 
?> 

El código anterior ocurre demasiado rápido, así que no puedo ver el mensaje:

He tratado :

<?php 
    sleep(5); 
    echo "Message has been sent."; 
    header("Location: page2.php", true, 303); 
    exit; 
?> 

Esto no muestra el mensaje tampoco, pero sí el sueño durante 5 segundos, que es sólo una pérdida de tiempo.

¿Cómo obtengo que muestre un mensaje durante 5 segundos antes de redireccionar?

+1

Asumo que pone en primer lugar el eco (Maye un rubor de la buffer) y LUEGO duerme, en lugar de dormir primero y luego echo? – Nanne

+2

Se debe a que el sueño se está produciendo en el servidor y desea que el retraso se produzca en el cliente, ¿no?Tendrá que usar javascript para que la demora suceda. –

Respuesta

24

No puede hacer esto con un redireccionamiento de ubicación HTTP, ya que esta redirección ocurrirá tan pronto como el navegador obtenga el encabezado. En su lugar, utilice una actualización redirigir en la cabecera:

header("Refresh:5; url=http://www.example.com/page2.php", true, 303); 

Este debe trabajo en los navegadores modernos, sin embargo, no es estándar, así que para obtener la funcionalidad equivalente sería no utilizar un redireccionamiento meta de actualización (lo que significa que' d tienen salida a un completo HTML también):

<meta http-equiv="refresh" content="5;url=http://www.example.com/page2.php"> 

de the Wikipedia page:

utiliza en la redirección, o cuando un nuevo recurso ha sido crea ted. Esta actualización de redirige después de X segundos. Esta es una extensión de encabezado patentada, no estándar, introducida por Netscape y compatible con la mayoría de los navegadores web .

+0

¿Esto hará una redirección 303? – oshirowanen

+1

No puedo encontrar el encabezado 'Refresh' en la especificación HTTP. ¿Está esto estandarizado? –

+0

No está estandarizado, sin embargo, estoy tratando de encontrar un navegador que no lo admita (estoy seguro de que hay uno). En cualquier caso, la alternativa a esto es una actualización '', que proporciona una funcionalidad similar – nickb

2

No podrá ver el mensaje si está utilizando una redirección de encabezado (Ubicación). De hecho, esa redirección no debería funcionar en absoluto ya que la salida se inicia antes de que se envíen los encabezados. En su lugar, debe repetir una actualización de metaetiqueta con un retraso, como este echo '<meta http-equiv="refresh" content="5;URL=\'http://example.com/\'">';

que tendrá un retraso de cinco segundos. Alternativamente, (y más correctamente) podría generar un redireccionamiento JS, ya que la etiqueta meta refresh está en desuso.

3

hacer la redirección mediante secuencias de comandos del lado del cliente:

<script> 
window.setTimeout(function() { 
    window.location = 'page2.php'; 
    }, 5000); 
</script> 
<p>Message has been sent.</p> 
3

Tiene que modificar el código de la siguiente manera:

<?php 

    echo "Message has been sent."; 
    sleep(5); 
    header("Location: page2.php", true, 303); 
    exit; 
?> 
0

no sé si ayuda, pero como yo estaba Al tratar el mismo problema en una forma que debe estar limpia después del envío del mensaje, encontré esta respuesta que explica que usted podría cambiar el valor de entrada para que esté vacío.

Esta es la respuesta: How do I reset the value of a text input when the page reloads?

y esto es cómo puedo solucionar mi problema, el uso de mi clase .Form control

$(document).ready(function() { 
    $(".form-control").val(''); 
});