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

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

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

He intentado:

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

Esto no mostrar el mensaje, pero no dormir durante 5 segundos, que es sólo una pérdida de tiempo.

Cómo hago para mostrar un mensaje a los 5 segundos antes de redireccionar?

Supongo que poner el eco de la primera (maye un vaciado del buffer) y LUEGO dormir, en lugar de primero sueño y luego echo?!
Es porque el sueño está ocurriendo en el servidor, y desea que el retraso a suceder en el cliente, ¿verdad? Tendrás que usar javascript para hacer el retardo de suceder.

OriginalEl autor oshirowanen | 2012-07-02

6 Comentarios

  1. 30

    Usted no puede hacer esto con una ubicación HTTP redirect, como este redirect va a suceder tan pronto como el navegador recibe el encabezado. En su lugar, utilice una actualización de redirección en el encabezado:

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

    Este debe trabajo en los navegadores modernos, sin embargo, no está estandarizado, por lo que para obtener la funcionalidad equivalente sería hacer uso de un meta refresh redirect (lo que significa que tendría la salida de un código HTML completo):

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

    De la página de la Wikipedia:

    Utilizado en la redirección, o cuando un nuevo recurso ha sido creado. Este
    actualización redirige después de X segundos. Esta es una propiedad, no estándar
    extensión de cabecera introducida por Netscape y apoyado por la mayoría de los web
    los navegadores.

    Hará esto una 303 redirect?
    No puedo encontrar la Refresh encabezado en la especificación de HTTP. Es este sistema?
    No es estandarizado, sin embargo estoy tratando de encontrar un navegador que no soporte (estoy seguro de que hay uno). En cualquier caso, la alternativa a esto es un <meta> de actualización, la cual proporciona una funcionalidad similar

    OriginalEl autor nickb

  2. 3

    Hacer la redirección mediante secuencias de comandos de cliente:

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

    OriginalEl autor Emil Vikström

  3. 3

    Tiene que modificar el código como este:

    <?php
    
        echo "Message has been sent.";
        sleep(5);
        header("Location: page2.php", true, 303);
        exit;
    ?>
    Esto no funciona para mí, @nickb método ha funcionado para mí, sin embargo.
    Esto funcionó para mí, gracias!

    OriginalEl autor Ali

  4. 2

    Usted no será capaz de ver el mensaje si usted está usando un encabezado(Ubicación) de redirección. De hecho, que la redirección no debe trabajar en todo, desde la salida comienza antes de que se envíen los encabezados. En su lugar, usted debe echo una etiqueta meta refresh con un retraso, como este
    echo '<meta http-equiv="refresh" content="5;URL=\'http://example.com/\'">';

    que va a tener un retraso de cinco segundos. Alternativamente, (y más correctamente) podría generar un JS de redirección, como la meta etiqueta de actualización está en desuso.

    OriginalEl autor Lusitanian

  5. 0

    no sé si ayuda pero como yo estaba tratando con el mismo problema en un formulario que deben limpiar después de la presentación del mensaje, he encontrado esta respuesta que se explica que se puede cambiar el valor de entrada vacío.

    Esta es la respuesta:
    ¿Cómo puedo restablecer el valor de una entrada de texto cuando se vuelve a cargar la página?

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

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

    OriginalEl autor GabouhSk8

Dejar respuesta

Please enter your comment!
Please enter your name here