2008-10-29 15 views
5

Wenn ein Webformular gesendet wird und den Benutzer auf eine andere Seite führt, wird der Benutzer häufig auf die Schaltfläche Zurück klicken, um das Formular erneut zu senden (das Formular ist eine erweiterte Suche in meinem Fall.)Wie kann der Webformular-Inhalt für die Zurück-Schaltfläche beibehalten werden?

Wie kann ich die vom Benutzer ausgewählten Formularoptionen zuverlässig beibehalten, wenn sie auf Zurück klicken (damit sie nicht von vorne anfangen müssen, wenn sie das Formular erneut ausfüllen Ändern nur eines von vielen Formularelementen?)

Muss ich die Route der Speicherung der Formularoptionen in Sitzungsdaten (Cookies oder Server-Seite) gehen oder gibt es eine Möglichkeit, den Browser damit zu umgehen mich?

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

Antwort

4

ich es in der Sitzung gestellt hatte.
Es wird die zuverlässigste sein und auch wenn sie nicht direkt "zurück" gehen, wird es immer noch ihre Suchoptionen dort haben. Putting es in den Cookie würde auch funktionieren, aber würde nicht empfohlen, es sei denn, es ist eine sehr kleine Form.

6

Ich glaube, Sie sind auf die Gnade des Browsers. Wenn Sie zurückschlagen, stellt der Browser keine neue Anfrage an den Server für den Inhalt, er benutzt den Cache (in fast jedem Browser, den ich je gesehen habe). Also alles Server-seitige ist raus.

Ich frage mich, wenn Sie etwas sehr Kompliziertes tun könnten wie das Speichern des Suchergebnisses in einem Cookie während des onunload-Ereignisses der Ergebnisseite und dann das Lesen des Cookies in Javascript auf der Suchseite und Ausfüllen des Formulars - aber Das ist nur Spekulation, ich weiß nicht, ob es funktionieren würde.

+5

Server-Seite ist nicht unbedingt keine Option - das JavaScript wird für die Seite erneut ausgeführt - so könnten wir eine Ajax-Anfrage stellen. –

+0

Das ist wahr. Ich habe das vergessen. –

2

Das Problem, das Sie haben, ist, dass der Browser eine zwischengespeicherte Version der Seite zurückgibt und den Server wahrscheinlich nicht erneut danach fragt, was bedeutet, dass die Verwendung der Sitzung irrelevant wäre.

Sie könnten jedoch AJAX verwenden, um die Details des zuvor übermittelten Formulars auf das Ladeereignis der Seite zu laden.

1

Sie müssten es grundsätzlich auf Ihrem Server speichern (wahrscheinlich in Sitzungsvariablen, wie vorgeschlagen) nach dem POST. Sie müssen auch Javascript auf der Formularseite einrichten, um beim Laden einen AJAX-Aufruf auszuführen, um die Daten von Ihrem Server (z. B. im JSON-Format) abzurufen und die Formularfelder mit den Daten vorzufüllen.

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 Daten zurück 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 grob und nicht getestet, aber das sollte Ihnen die Grundidee geben.

Als eine Randnotiz: aktuelle Versionen von Opera und Firefox erhalten Formularfeld Inhalt beim Zurückgehen. Ihr JS-Code wird dies überschreiben, aber das sollte sicher sein.

0

Eine weitere Ajaxy-Option (so ist es nicht für Benutzer ohne Javascript) ist das Formular über Javascript zu senden und dann die Bestätigungsseite zu gehen (oder die Nachricht im Formular anzeigen, indem Sie die Schaltfläche durch eine Nachricht ersetzen). So ist kein "Zurück" möglich.

0

Warum speichern Sie die Werte nicht vor dem Senden in einem Cookie?Sie können auch einen Zeitstempel oder ein Token einfügen, um anzugeben, wann es ausgefüllt wurde. Wenn die Seite dann geladen wird, können Sie bestimmen, ob Sie die Felder mit Daten aus dem Cookie füllen oder sie einfach leer lassen, da dies eine neue Suche ist.

3

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

IE, Firefox, etc. wird sich glücklich erinnern den Inhalt des Formulars auf der vorherigen Seite, und zeigen Sie es erneut, wenn Zurück angeklickt wird ... solange Sie nichts tun, um diese Arbeit zu stoppen, wie Machen Sie die Seite No-Cache oder erstellen Sie das Formular vollständig aus dem 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.)

+0

Die Ausnahme ist, wenn die Formularaktion eine HTTPS-Seite ist, denke ich (und möglicherweise, wenn das Formular auch https ist). –

0

Sie auch alles vor Ort von Javascript tun könnte. Sie speichern also einen Cookie mit dem Suchwert und überprüfen beim Pagenload, ob der Cookie existiert. So etwas wie dieses:

$('#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); 
}); 

Habe dies nicht getestet, aber sollte funktionieren. Sie benötigen dazu jQuery.

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

ich btw sagen sollte, dass beide FireFox und IE standardmäßig dieses Verhalten haben.