2012-07-02 8 views
5

Ich habe die folgende PHP-Code, den ich auch eine Verzögerung hinzufügen möchten:Headerort Verzögerung

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

Der obige Code zu schnell geschieht, so kann ich die Meldung:

ich versucht habe, :

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

Diese die Nachricht nicht entweder angezeigt, aber es tut Schlaf für 5 Sekunden, die nur eine Verschwendung von Zeit.

Wie bekomme ich es vor Umleiten eine Nachricht für 5 Sekunden angezeigt werden?

+1

Ich nehme an, Sie das erste Echo setzen mit (Maye einen Flush von der puffern) und DANN schlafen, anstatt zuerst zu schlafen und dann zu echo ?! – Nanne

+2

Es ist, weil der Schlaf auf dem Server passiert, und Sie wollen die Verzögerung auf dem Client geschehen, oder?Sie müssen Javascript verwenden, um die Verzögerung zu ermöglichen. –

Antwort

24

Sie können dies nicht mit einer HTTP-Speicherort Umleitung, da diese Umleitung so schnell passieren wird, wie der Browser den Header bekommt. Verwenden Sie stattdessen eine Refresh-Umleitung in der Kopfzeile:

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

Diese sollte Arbeit an modernen Browsern, aber es ist nicht standardisiert, so die entsprechende Funktionalität zu erhalten wäre verwenden eine Meta-Refresh-Weiterleitung (das heißt, Sie‘ d haben auch einen vollständigen HTML-Ausgabe):

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

Von the Wikipedia page:

in Umleitung, oder wenn eine neue Ressource wird Crea ted. Diese Aktualisierung wird nach X Sekunden umgeleitet. Dies ist eine proprietäre, nicht standardmäßige Header-Erweiterung , die von Netscape eingeführt und von den meisten Web-Browsern unterstützt wird.

+0

Wird dies eine 303 Umleitung tun? – oshirowanen

+1

Ich kann den Refresh-Header in der HTTP-Spezifikation nicht finden. Ist das standardisiert? –

+0

Es ist nicht standardisiert, aber ich versuche, einen Browser zu finden, der es nicht unterstützt (ich bin mir sicher, dass es einen gibt). In jedem Fall ist die Alternative dazu eine '' Refresh, die ähnliche Funktionalität liefert – nickb

2

Sie werden nicht in der Lage sein, die Nachricht zu sehen, wenn Sie einen Header (Ort) umleiten verwenden. In der Tat sollte diese Umleitung überhaupt nicht funktionieren, da die Ausgabe beginnt, bevor die Header gesendet werden. Stattdessen sollten Sie ein Meta-Tag-Refresh mit einer Verzögerung wie diese echo '<meta http-equiv="refresh" content="5;URL=\'http://example.com/\'">';
Echo eine Verzögerung von fünf Sekunden haben. Alternativ (und korrekter) könnten Sie eine JS-Weiterleitung ausgeben, da das Meta-Aktualisierungs-Tag veraltet ist.

3

Sie die Umleitung Client-seitiges Scripting mit:

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

Sie haben Ihren Code wie folgt zu ändern: war

<?php 

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

ich weiß nicht, ob es aber, wie ich hilft Ich behandle das gleiche Problem in einer Form, die nach der Übermittlung der Nachricht sauber sein muss, fand ich diese Antwort, die erklärt, dass Sie die Werteingabe ändern konnten, um leer zu sein.

Dies ist die Antwort: How do I reset the value of a text input when the page reloads?

und das ist, wie ich mein Problem zu beheben, meine Klasse .form-control

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