2009-06-02 7 views
5

Stellen Sie sich vor, ein Benutzer hat gerade Daten in Ihrer Webanwendung veröffentlicht und Sie möchten die aktuelle Seite mit einer Nachricht über ihren Erfolg oder Fehler erneut anzeigen. Das wird kompliziert.Wie gehen Sie mit all den Möglichkeiten um, die Sie von einem HTTP-POST erhalten könnten?

Wenn die Daten gültig sind und der Benutzer HTML erwartet, möchten Sie eine Weiterleitung ausgeben, damit die Aktualisierung sie nicht erneut sendet. Sie möchten zum Referer umleiten, falls vorhanden, und eine Nachricht anzeigen. Wenn sie nicht HTML erwarten, können Sie einfach 200 OK zurückgeben.

Wenn die Daten ungültig sind und der Benutzer HTML erwartet, möchten Sie die Seite, von der sie stammen, mit einem sichtbaren Fehler erneut rendern, sodass sie erneut posten können. Um dies zu tun, müssten Sie die vorherige Aktion ausführen und auf die Fehlermeldung aufmerksam machen. Um zu entscheiden, welche die vorherige Aktion war, haben Sie diese möglicherweise als versteckten Parameter in das Formular aufgenommen. Wenn sie html nicht erwarten, können Sie einen anwendbaren 4xx-Client-Fehler zurückgeben.

Ich finde mich viel zu oft diesen albernen Tanz. Also die Fragen sind:

1) Wie würden Sie diesen ganzen Prozess abstrahieren, so dass jeder Form Post davon profitieren kann?

2) Was ist der wartungsfreundlichste oder am wenigsten repetitive Weg, um dies in Ihrem bevorzugten Web-Framework zu erreichen?

3) Gibt es irgendetwas, was Sie an diesem ganzen Prozess ändern würden, um es einfacher zu machen?

Idee 1: Rendern Sie nie auf einem Post, immer umleiten. Füllen Sie die Fehlerdaten in der Sitzung für einen Sekundenbruchteil zwischen Anforderungen aus und löschen Sie sie dann, genau wie die Erfolgsmeldung. Auf diese Weise können gültige und ungültige Posts auf die gleiche Weise behandelt werden.

Idee 2: Machen Sie keine normalen HTTP-Posts. Benutze nur Ajax. Jetzt müssen Sie sich keine Gedanken mehr über das Rendern oder Weiterleiten machen. Dies wäre nur nützlich, wenn Sie bereits eine ajaxlastige Anwendung haben.

Antwort

0

Making anständige Web-Anwendungen ohne JavaScript ist zu viel Arbeit. Ich werde nur AJAX in diesen Situationen verwenden.

3

Idee 2 ist aus dem Fenster. Das ist eine schreckliche Idee und überhaupt nicht notwendig. AJAX ist nett, aber übertreibe es nicht. Ganz zu schweigen - was ist mit diesem Teil der Benutzer mit Javascript deaktiviert?

Ich denke, was Sie denken (ohne es wirklich zu wissen) ist das Post/Redirect/Get Muster. Es ist die beste Vorgehensweise, wenn es darum geht, und Sie sollten es befolgen. Grundsätzlich, wie Sie gesagt haben, Sie nie reagieren auf einen POST durch etwas anderes als eine Weiterleitung. Soweit Benachrichtigungen, die meiste Zeit Sie wissen,, wo sie kommen wegen der besonderen Aktion. Wenn nicht, ist der HTTP-REFERER eine gute Alternative. Ja, es kann deaktiviert werden, aber das sind ~ 1% Ihrer Benutzer. Soweit Benachrichtigungen, Sitzungen sind perfekt dafür. Speichern Sie den Code und die Nachricht in der aktuellen Sitzung und machen Sie Ihre Vorlage darauf aufmerksam. Drucken Sie die Nachricht aus, wenn sie vorhanden ist, und löschen Sie die Sitzungsvariablen.

+0

Ich nehme an, Sie wissen nicht, woher Sie kommen. Ich stoße häufig auf Situationen, in denen ich von verschiedenen Seiten auf dieselbe URL verweisen möchte, um eine Aktion erneut zu verwenden. In dem Fall, in dem die Daten ungültig sind und ich rendere statt weiterzuleiten, müsste ich die vorherige Aktion intuitiv angehen. Ich nehme an, ich könnte dies vom Referrer immer noch erahnen. –

0

Es gibt keine Schande, Postbacks zu tun, und Postbacks können Sie nicht wirklich vermeiden, weil es der einfachste Weg ist, Daten über HTTP-Anfragen persistent zu machen. Dies oder Abfrageparameter, die noch ein Rundum-Trip zum Server ist, so dass es sich bei ein paar Kompromissen um dasselbe handelt. Die Verwendung des Ansichtszustands oder der Sitzungen wird nicht empfohlen.

Im Idealfall wird auf derselben Seite überprüft, ob es sich bei der Anfrage um eine Post zurück handelt und die gesamte Logik verarbeitet. In den meisten Fällen hat Ihr Code hinter oder Anwendungsseiten mit Formularen einen Abschnitt, um einen Post zurück zu verarbeiten.

+0

Was ist ein Postback? Was ist der Ansichtszustand? –

Verwandte Themen