2010-12-23 7 views
0

Dies ist, was läuft, nachdem ein Formular abgeschickt:Kann nicht machen „Reload“ Skript in PHP Arbeit

else 
{ 
    echo '<br/> Tu chisme se agregó con éxito.'; 
    echo '<script type="text/javascript">window.location.reload(true);</script>'; 
} 

Grundsätzlich nach den Benutzer das Formular abschickt es ein paar Dinge tut und schließlich zeigt einen Text sagen, dass Der Beitrag wurde erfolgreich gesendet und anschließend versucht ein zweites Echo, die Seite neu zu laden. Ich konnte es jedoch nicht schaffen. Es zeigt den Text an, lädt die Seite jedoch nicht neu. Was ist das Problem mit dem Code? Bitte fragen Sie nach Informationen. Dank

+2

Wenn Sie es schaffen, werden Sie feststellen, dass Sie nicht genug Zeit haben, um die Nachricht zu lesen! :-) – acm

+1

Er kann es nicht so machen, wie es ist, weil die Nachricht, die angezeigt wird, eine Seite für sich ist und er DIESE Seite neu lädt. – Erik

Antwort

2

Die richtige Sache nach einem POST ist eine 'Redirect After Post', dh das Senden eines HTTP-Headers mit einem 303-Code (kein einfacher 302-Code, die meisten Browser verhindern, dass Sie mit der Zurück-Taste erneut senden, wenn Sie benutze den 303 Code, es ist für diesen Zweck gemacht).

Sie sollten nichts senden, bevor Sie diesen HTTP-Header-Code senden (versuchen Sie es mit ob_start/ob_flush Funktionen, um das zu kontrollieren).

Also, in der Tat enthält das HTTP-Protokoll alles, was Sie brauchen, um das Verhalten nach POST-Anfragen zu steuern, es ist wirklich besser, die Verwendung von JavaScript dafür zu vermeiden.

0

Wenn Ihr Skript druckt diese Zeile mit "text/javascript", es ist schon eine neue Seite. Sie laden diese neue Seite neu, die sich selbst neu lädt. Wenn Sie die Besucher auf die Originalseite lenken möchten, können Sie PHP header:

header("Location: http://www.example.com/"); 

example.com Ersetzen Sie dabei mit dem Ziel-URL. Es funktioniert nur, wenn vorher nichts anderes auf der Seite ausgegeben wurde, also müssen Sie diese eine Textzeile entfernen.

+1

Bekomme ich nicht "Header bereits gesendet" tun das? – lisovaccaro

+0

Nicht, wenn Sie die Ausgabepufferung verwenden. http://php.net/ob_start – ceejayoz

+0

Ich bin mir nicht sicher, was du meinst. Wenn Sie neu laden, laden Sie eine URL neu, nicht ein bestimmtes Dokument. Nur weil er eine temporäre Nachricht ausgibt, bedeutet das nicht, dass das neu geladene Dokument automatisch die gleiche Nachricht haben muss. Es ist möglich, dass der bedingte Block, der die Nachricht ausgibt, nicht ausgeführt wird und das Skript möglicherweise einen anderen Ausführungspfad verwendet. Viele Skripte verwenden Reloads auf diese Weise. –