Frage

Wenn ein Web-Formular gesendet wird und führt den Benutzer zu einer anderen Seite, ist es ziemlich oft der Fall, dass der Benutzer die Zurück-Taste anklicken, um das Formular erneut einzureichen (die Form ist eine erweiterte Suche in meinem Fall.)

Wie kann ich die Form Optionen zuverlässig erhalten durch den Benutzer ausgewählt, wenn sie klicken Sie auf Back (so haben sie nicht ganz von vorne anfangen mit der Form wieder füllen, wenn sie nur ändern sich einer von vielen Formelemente?)

Muß ich den Weg geht von den Formularoptionen in Sitzungsdaten zu speichern (Cookies oder Server-Seite) oder ist es eine Möglichkeit, um den Browser zu bekommen dies für mich zu handhaben?

(Environment ist PHP / JavaScript - und die Website muss arbeiten auf IE6 + und Firefox2 +)

War es hilfreich?

Lösung

ich es in der Sitzung gestellt hatte.
Es wird die zuverlässigste sein und selbst wenn sie gehen nicht gerade „zurück“, es wird noch da ihre Suchoptionen haben. Um es in dem Cookie würde auch funktionieren, aber nicht zu empfehlen wäre, wenn es eine sehr kleine Form ist.

Andere Tipps

Ich glaube, Sie an der Gnade des Browsers sind. Wenn Sie wieder treffen, wird der Browser nicht eine neue Anforderung für den Inhalt an den Server, den Cache verwendet (in fast jedem Browser habe ich gesehen, sowieso). So etwas Server-Seite ist aus.

Ich frage mich, wenn Sie sehr etwas tun könnte das Suchergebnis in einem Cookie während des onunload Falle der Ergebnisseite kompliziert wie Speichern, und dann das Cookie in Javascript auf der Suchseite zu lesen und in das Formular ausgefüllt haben - aber das nur Spekulation ist, weiß ich nicht, ob es funktionieren würde.

Es liegt an den Browser, sondern in den meisten Fällen müssen Sie nichts tun.

IE, Firefox, etc. wird gerne den Inhalt der Form auf der vorherige Seite erinnern und wieder zeigen, wenn Zurück geklickt wird ... solange man nichts tun, dass die Arbeit zu stoppen, wie machen die Seite no-cache oder Gebäude die Form vollständig aus Skript.

(Putting Sachen in der Sitzung ist wahrscheinlich Browser mit zwei Registerkarten auf der gleichen Form offen zu verwirren. Seien Sie sehr vorsichtig, wenn so etwas zu tun.)

Das Problem, das Sie haben, ist, dass der Browser eine Cache-Version der Seite angezeigt werden kann, und wahrscheinlich den Server diese Daten nicht erneut fragen, mit der Sitzung Bedeutung wäre irrelevant.

Sie könnten jedoch AJAX verwenden, um die Details des zuvor eingereichten Formulars zu laden, auf der Load-Ereignisse der Seite.

Sie würden im Grunde ist es in gewisser Weise auf dem Server zu speichern haben (wahrscheinlich in Session-Variablen, wie vorgeschlagen) nach dem POST. Sie haben auch die Einrichtung Javascript auf der Formularseite auf Last auszuführen einen AJAX-Aufruf zur Ausgabe der Daten von dem Server zu erhalten (in, sagen wir, JSON-Format) und prefill die Formularfelder mit den Daten.

Beispiel jQuery-Code:

$( document ).ready( function() {
  $.getJSON(
    "/getformdata.php",
    function( data ) {
      $.each( data.items, function(i,item) {
        $( '#' + item.eid ).val( item.val );
      } );
    });
} );

Ihre /getformdata.php könnten zurückkehren Daten wie:

{
  'items': [
    {
      'eid': 'formfield1',
      'val': 'John',
    },
    {
      'eid': 'formfield2',
      'val': 'Doe',
    }
  ]
}

und es wäre natürlich ein leeres Array zurück, wenn es nichts gespeichert noch für die Sitzung ist. Der obige Code ist rau und ungetestet, aber das sollte man die Grundidee geben.

Als Randbemerkung: Aktuelle Versionen von Opera und Firefox werden Formularfeld Inhalt bewahren, wenn zurück gehen. Ihr JS-Code überschreibt diese, aber das sollte sicher sein.

Ein andere AJAXy Optionen (so ist es für Benutzer ohne Javascript nicht gut) ist das Formular über Javascript einreichen und dann die Bestätigungsseite gehen (oder die Meldung auf dem Formular, indem Sie die Taste mit einer Nachricht zu ersetzen). Auf diese Weise gibt es kein „zurück“ möglich.

Warum speichern nicht die Werte in einem Cookie, vor der Unterbreitung? Sie könnten auch einen Zeitstempel enthalten oder um anzuzeigen, Token, wenn es wurde ausgefüllt. Dann, wenn die Seite geladen wird, können Sie feststellen, ob Sie in den Feldern mit Daten aus dem Cookie füllen sollten, oder sie einfach leer lassen, da dies eine neue Suche ist.

Sie können auch durch Javascript alles lokal tun. So speichern Sie einen Cookie mit dem Suchwert und auf Pageload Sie überprüfen, ob das Cookie vorhanden ist. So etwas wie folgt aus:

$('#formSubmitButton').click( function() {
    var value = $('#searchbox').val();
    var days = 1;
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
    document.cookie = "searchbox="+value+expires+"; path=/";
});

$(document).ready( function() {
    var nameEQ = "searchbox=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) var valueC = c.substring(nameEQ.length,c.length);
   }
   $('#searchbox').val(valueC);
});

Lassen Sie sich dies nicht getestet, sondern sollte funktionieren. Sie werden diese jQuery für benötigen.

Cookie Funktionen kamen von: http://www.quirksmode.org/js/cookies. html

Ich sollte übrigens sagen, dass beide FireFox und IE haben dieses Verhalten standardmäßig aktiviert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top