2012-07-02 11 views
5

Ho il seguente codice PHP che voglio aggiungere un ritardo troppo:intestazione ritardo posizione

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

Il codice di cui sopra accade troppo in fretta, quindi non posso vedere il messaggio:

ho provato :

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

Questo non visualizza il messaggio sia, ma lo fa sonno per 5 secondi, che è solo una perdita di tempo.

Come faccio a visualizzare un messaggio per 5 secondi prima di reindirizzare?

+1

presumo si mette prima l'eco (Maye un colore della buffer) e THEN dormono, invece di prima dormire e poi echeggiare ?! – Nanne

+2

È perché il sonno sta accadendo sul server e vuoi che il ritardo si verifichi sul client, giusto?Avrai bisogno di usare javascript per far accadere il ritardo. –

risposta

24

Non è possibile eseguire questa operazione con un reindirizzamento della posizione HTTP, poiché questo reindirizzamento avverrà non appena il browser ottiene l'intestazione. Al contrario, utilizzare un aggiornamento reindirizzare nell'intestazione:

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

Questo dovrebbe lavoro sul browser moderni, tuttavia non è standardizzato, in modo da ottenere la funzionalità equivalente sarebbe non utilizzare un meta refresh di reindirizzamento (il che significa' d hanno per produrre un HTML completo troppo):

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

da the Wikipedia page:

Utilizzato in reindirizzamento, o quando una nuova risorsa è stata crea ted. Questo aggiorna i reindirizzamenti dopo X secondi. Si tratta di un'estensione di intestazione proprietaria non standard introdotta da Netscape e supportata dalla maggior parte dei browser Web .

+0

Questo farà un reindirizzamento 303? – oshirowanen

+1

Non riesco a trovare l'intestazione 'Aggiorna 'nella specifica HTTP. È standardizzato? –

+0

Non è standardizzato, tuttavia sto cercando di trovare un browser che non lo supporta (sono sicuro che ce n'è uno). In ogni caso, l'alternativa a questo è un '' refresh, che offre funzionalità simili – nickb

2

Non sarà possibile visualizzare il messaggio se si sta utilizzando un reindirizzamento intestazione (Posizione). In effetti, tale reindirizzamento non dovrebbe funzionare affatto poiché l'output inizia prima che vengano inviate le intestazioni. Invece, dovresti echo un aggiornamento di meta tag con un ritardo, come questo echo '<meta http-equiv="refresh" content="5;URL=\'http://example.com/\'">';che avrà un ritardo di cinque secondi. In alternativa, (e più propriamente) è possibile generare un reindirizzamento JS, in quanto il tag meta refresh è deprecato.

3

fare il redirect tramite scripting lato client:

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

È necessario modificare il codice in questo modo:

<?php 

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

non so se aiuta, ma come mi era trattando lo stesso problema in un modulo che deve essere pulito dopo la presentazione del messaggio, ho trovato questa risposta che spiega che è possibile modificare il valore di input per essere vuoto.

Questa è la risposta: How do I reset the value of a text input when the page reloads?

e questo è come risolvere il mio problema, utilizzando la mia classe .Form controllo

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