Nicht vorlegen, Ihre Formulare Ajax ThemTseinem Artikel konzentriert sich sowohl auf die Lösung des Problems beim Senden von Daten über HTTP POST und über die Definition eines Staates, der mit einer HTML-Seite zugeordnet ist. Dieser Artikel behandelt die folgenden Themen: • Erläuterung der Probleme mit HTTP-Thema in Verbindung stehen • Wie man die Probleme, die HTTP-Pfosten bezogen fix • Illustration eines Workflow-Architektur
• Verband der Staat mit einem Handler Problem Sie möchten die Ajax nutzen, um einige der Probleme mit der Vorlage bildet die traditionelle Art und Weise mit POST verbunden sind. Theory Solution Web Application Frameworks haben zu großen Extents gegangen, um die HTTP-POST-Problem zu lösen. Sie müssen nicht weiter zu suchen als die ASP.NET-Framework die Komplexität, dafür zu sorgen Beteiligten sehen, dass der Browser auf Zurück, oder Aktualisieren die Knöpfe nicht zu einem Berg von Problemen verursachen in Bezug auf die Server-seitige Staat. ASP.NET ist nicht zu tadeln, weil ihre Schöpfer versuchten, eine dynamische Architektur in eine alte statische Web-Infrastruktur integrieren. Die folgenden Punkte fassen den Vorteil, dass mit diesem Ansatz: • Die Daten werden auf dem Server nur einmal gesendet und nur, wenn der Benutzer das Formular "Absenden". • Die Server-Seite speichert eine Anwendung an, dass Sie verwenden können, HTTP GET zu nennen, wenn eine bestimmte HTML-Seite aufgerufen wird. Daher können Sie den Browser Back-und Browser-Forth-Tasten verwenden, um zwischen den Seiten, ohne den Server-Side-Staates oder der Client-Seite HTML-Seite zu bewegen. Die Umwandlung der POST Verwenden der XMLHttpRequest Object Die Lösung des HTTP-POST-Problem ist einfach, aber es erfordert die Fähigkeit, das XMLHttpRequest-Objekt zu verwenden. In diesem Abschnitt erfahren Sie, wie auf den ursprünglichen Antrag auf die neue Architektur nutzen zu konvertieren. Der ursprüngliche und der neue HTML-Seiten werden zu einem Code-Ebene dargestellt werden. Die Idee dieses Abschnittes ist es, die Umwandlung zu illustrieren. Die Original-HTML-Formular Die ursprüngliche HTML-Formular verwendet ein HTTP-POST und wird wie folgt dargestellt:
Die kühne Form Attribute zeigen, dass, wenn der Submit-Button gedrückt wird, wird die URL / ajaxrest Artikel / Architektur / forms / Posted.ashx heißt mit einer POST. Aus Representational State Transfer (REST) Perspektive, die URL akzeptiert nur eine einzige Verb, POST. Das ist der Kern des Problems, dass Sie nicht auffinden können die Seite mit einer GET, die den Standard-HTTP-Verb von einem Browser verwendet wird. Die konvertierten HTML-Formular Die konvertierten HTML-Formular verwendet die gleiche HTML-Konstrukte, sondern es delegiert die POST an ein XMLHttpRequest und ruft die nächste Seite mit einem GET. Der folgende Code zeigt die konvertierte HTML-Formular:
Die wichtige geänderte Teile der HTML-Seite sind fett dargestellt. Die gesamte Veränderung wurde auf die Art der Eingabe unterbreitet Taste leicht umzuwandeln, und auf die Schaltfläche klicken Umsetzung der Veranstaltung. Der Klick-Ereignis ruft OnSubmit und ist dafür ein POST und GET verantwortlich. Wenn OnSubmit genannt wird, die Funktion RepresentationManager.iterateHTML.get aufgerufen, die verwendet wird, um den Zustand, in das HTML-Formular-Elemente zu extrahieren. Normalerweise, wenn die vorhergehende HTML-Formular mit vorlegen Technik gelingt es der Browser die Extraktion des Staates aus dem HTML-Formular. Es ist komplizierter, um eine benutzerdefinierte Extraktion durchzuführen, aber es hat den zusätzlichen Vorteil, geben zu können, den Zustand von anderen HTML-Elemente wie div oder span-Elemente zu extrahieren. Sie müssen sich einer GET-Methode aufrufen, als ein Zustand allgemeinen Extraktion denken , die ein JavaScript-Objekt zugeordnet ist. Wenn der JavaScript-Objekt, das den Staat geschaffen wurde, müssen Sie das Objekt in einem Computer-Grafik-Interface (CGI) konvertieren-kodierten Query-String. Die Funktion Ops.serializeCGI führt die Konvertierung. Auch hier müssen Sie eine benutzerdefinierte Serialisierung durchführen, aber Sie müssen die zusätzliche Flexibilität der Serialisierung ein CGI-kodierten Query-String, blieb ein JavaScript Object Notation (JSON) oder sogar ein XML-String. Dann, wenn Sie die CGI-Query-Strings, Sie den restlichen Code in OnSubmit, um die Daten auf dem Server bereitzustellen. Beachten Sie, dass die POST-URL verwendet wird, aus dem HTML-Formular. Sobald die Post hat bei der Umsetzung der onComplete Verfahren abgeschlossen ist, ist die location.href zugewiesen die URL, die POST wurde. Hier ist, wo Sie vielleicht verwirren zu lassen. Warum ersten POST und dann die gleiche URL? Es könnte scheinen, effizienter zu erfüllen eine einzige POST oder GET. Der Grund für die Ausführung der beiden Verben ist aufgrund der Geschichte Browser. Die Post ist durch das XMLHttpRequest-Objekt ausgeführt und somit nicht Teil der History des Browsers. Der POST wird verwendet, um einen Staat auf dem Server zu erstellen und dann den Browser führt die GET, so dass die Seite in den Browser-Verlauf aufgezeichnet wird. Als Folge hat der Browser zwei startet in die Geschichte, die anstelle von GET und POST, wie es der Fall in der ursprünglichen HTML-Formular Beispiel. Wenn Sie zwei GETs in der Geschichte haben, brauchen Sie nicht auf darzulegen, den Server zu senden, da der Staat abgerufen werden. Der Kunde fordert immer noch die gleiche URL, aber die Funktionalität der Server-URL hat sich geändert. In der modifizierten HTML-Formular Beispiel hat der Server auf eine POST reagieren und eine GET. Allerdings muss der Server verbinden einen Staat mit der Bitte, die nicht im Fall der ursprünglichen HTML-Formular erforderlich. In der ursprünglichen HTML-Formular, war der Staat mit jeder POST erzeugt. Zuordnen eines Staates mit dem Antrag ist nicht so schwierig und erfordert lediglich die Verwendung der Web-Anwendung bereitgestellt Session-Mechanismus. Sie müssen die Server-seitigen Code so zu ändern, dass die von der Post hat in der Sitzung gespeichert und abgerufen, wenn die GET aufgerufen wird. Der folgende Code zeigt eine sehr einfache Umsetzung des ursprünglichen serverseitigen Code: public void ProcessRequest (HttpContext ctx) (ctx.Response.ContentType = "text / html"; ctx.Response.Write ( " Sie schrieb "+ ctx.Request [" Beispiel "] +" ");) Hier ist die modifizierte Server-Code: public void ProcessRequest (HttpContext ctx) (ctx.Response.ContentType =" text / html "; if (ctx.Request.HttpMethod ==" POST ") (ctx.Session.Add ( "Beispiel", ctx.Request [ "Beispiel"]) ctx.Response.Write; ( " Sie schrieb "+ ctx.Request [" Beispiel "] +" ");) Else if (ctx.Request.HttpMethod ==" GET ") (ctx.Response.Write (" Sie schrieb "+ ctx.Session [" Beispiel "] +" ");)) Das Beispiel ist codiert mit ASP.NET, aber selbst wenn Sie nicht eine ASP.NET-Programmierer sind, sollten Sie in der Lage, die Erklärung folgen. In der ursprünglichen Implementierung von ProcessRequest, wurde davon ausgegangen, dass Sie die Methode unter Verwendung eines POST nennen. Um den Inhalt zu generieren, extrahieren Sie das Beispiel Variable mit der Methode ctx.Request. Da die ursprüngliche Implementierung der ProcessRequest definiert ist, gibt es keine Erinnerung daran, daß zuvor genannt worden. Die generierte Ausgabe ist auf die Parameter in der POST gesendet abhängig. Der ursprüngliche Code als gefährlich betrachtet, weil eine POST angenommen wird. Wenn ein GET ausgeführt wird, dann Probleme auftreten, weil einem inkonsistenten Zustand definiert werden. In der modifizierten Source-Code, testen Sie zuerst die HTTP-Verb, das Sein (ctx.Request aufgerufen wird. HTTPMethod). Wenn ein HTTP-POST aufgerufen wird, dann die Inhalte ist wie das Original-HTML-Formular Beispiel, und der Staat ist, um die Sitzung (ctx.Session) gespeichert. Wenn ein HTTP-GET aufgerufen wird, dann die Inhalte ist vergleichbar mit der POST, es sei denn, daß der Staat Von der Sitzung. POSTen Forms und REST In der modifizierten verwendet beispielsweise die URL / ajaxrest Artikel / Architektur / forms / AjaxPosted.ashx und nutzt eine Sitzung. Das Problem bei diesem Ansatz ist, dass HTTP-Cookies verwendet werden, um festzustellen, welche Inhalte erzeugt wird. Die Lösung wird verwendet, um zu zeigen, dass Sie relativ leicht ändern können eine bestehende Anwendung, die eine POST verwendet, in eine, die Ajax-Verbindung GET und POST verwendet. Weiter, ändern Sie die POST-und GET-Kombination keine Session-Variablen verwenden. Oder, um es kurz und bündig, es ist in Ordnung, die Session-Variablen, solange sie nicht verwenden, Cookies zu verwenden. Zum Beispiel, in der ASP.NET-Architektur ist es möglich, sowohl die Session-Variablen ändern Sie die URL zu einer Kennung, die Querverweise auf eine Session-Variable. Nachdem die Infrastruktur ändern Sie die URL ist es möglich, die URL und verweisen articlemark gehören zu einem späteren Zeitpunkt. Sie werden jedoch auf ein Problem stoßen, wenn Sie Session-Variablen aus jener Zeit zu verwenden. A timed-out Session-Variablen, auch wenn es verwendet keine Cookies, ist problematisch, da die Benutzer die URL könnte articlemarked haben und sich später herausstellte, dass sie nicht auf ihn verweisen. Es ist möglich, nur die Session-Variablen zu Zeit eine sehr lange Zeit ab jetzt gesetzt, aber das löst nicht das Problem der Staat schließlich verschwinden. Im Falle dieses Artikels, das letzte, was Sie wollen, geschieht, ist das Verschwinden des Staates. Daher müssen Sie erneut Architekt der Server einen Cache anstelle von Session-Variablen. Der Vorteil des Cache ist, dass es Sie gibt die Fähigkeit zu kontrollieren, wenn ein Stück der Staat nach wie vor und wird gestrichen. Das nächste Problem ist ein bisschen komplizierter. In der modifizierten Beispiel für das HTML-Formular, reagierte die Seite PostAjax.ashx entweder eine GET-oder POST. Wenn die GET genannt wurde, war der Zustand der HTML-Seite und der HTML-Seite selbst in einem Schritt kombiniert. Aus Artikel 5, wissen Sie, dass die Kombination der HTML-Seite mit seinen Zustand ist falsch. Sie wollen in der Lage sein, den Staat als AWeb Service-Aufruf zu laden. Dies bedeutet, zwei URLs sind notwendig. Die "Unterstützung der HTML-Seiten mit relativen URLs"-Abschnitt in Artikel 5 zeigt Ihnen, wie Sie die beiden URLs zu verwalten. • / workflow/page1/1234: Diese URL wird verwendet, um die HTML-Seite, die im Browser angezeigt wird, herunterladen. Die URL unterstützt nur das Verb GET, wie es verwendet wird, um den HTML-Inhalt vom Server herunterzuladen. • / services/workflow/page1/1234: Diese URL unterstützt sowohl die POST-und GET-Verben und ist der Staat mit der HTML-Seite URL verbunden. Der Staat URL wird mit dem Verfahren im Abschnitt "Unterstützung von HTML-Seiten mit relativen URLs" in Artikel 5. Beide Beispiel-URLs sind mit der Zahl 1234, das ist die eindeutige Kennung zwischengespeicherten Daten verwendet, wenn beim Laden der Staat angehängt. Im Zustand HTML-Seite und Lösung, den Staat durch eine HTML-Seite erstellt wird, um eine andere Seite übertragen. Wieder in den Code der HTML-Formular, um beispielsweise Look. Der Zustand der HTML-Seite mit dem PostAjax.ashx Seite verwiesen wurde. Mit der Staats-und HTML-Seite Lösung, muss der Staat mit der Seite verbunden sein, und damit die Durchführung des geänderten HTML-Formular Beispiel ändert sich leicht auf die folgenden:
Der kühne Code zeigt die zusätzliche Teile erforderlich sind, um den Zustand und die HTML-Seite Lösung zu implementieren. Wie in Artikel 5, erklärte, wenn die Seite vollständig geladen wurde, ist die body.onload Ereignis ausgelöst und ruft die Funktion initialisieren. Calling Initialize Ergebnisse in dem Zustand, eingeholt zu werden mit der URL dynamisch berechnet mit Hilfe der Funktion URLEngine. ServicesURL. Wenn der Staat abgerufen worden ist, ist es deserialisiert und der HTML-Seite mit den Methoden serializeFromCGI und iterateHTML.set zugeordnet. Die Umsetzung der OnSubmit bleibt die gleiche, mit aminor Änderung wird die URL, wo der Staat als gebucht wird. Die POST-URL muss der gleiche wie die zur Verschlüsselung der Daten in die Initialize-Funktion abrufen. Auf der nächsten Seite, die Belastungen nach dem Stand bleibt gleich, Sie können es nach Ihren Wünschen zu ändern. Die URL, die der nächsten Seite, rechtfertigt ein wenig Diskussion bestimmt. Im Falle des HTML-Codes wird das beladene URL / ajaxrest Artikel / Architektur / forms / AjaxPosted.ashx. Die URL ist nicht mit einem Cache-Kennung angehängt, so dass die URL nicht mit einem Staat verbunden ist. In der modifizierten HTML-Formular definiert beispielsweise ein Cookie der Staat, der mit der URL zugeordnet ist. Da Sie keine Cookies verwenden, hat die URL kein Staat. Wenn diese, ist die gewünschte Wirkung, dann können Sie den Code lassen wie es ist. Dies ist jedoch vermutlich nicht die gewünschte Wirkung, so müssen Sie assoziieren den Cache-Kennung mit der URL. Daher muss die URL / ajax articles/architecture/forms/1234 / AjaxPosted.ashx oder etwas in diese Richtung. Das wichtige ist, dass die Bit einzigartige Cache-Kennung in der URL enthalten ist. Allerdings ist die URL hart codiert, so dass Sie brauchen, um sie dynamisch zu ändern, ähnlich wie das Konzept in Artikel 5 dargestellt. Kurz gesagt, müssen Sie die Gruppen von URLs zu definieren. Zum Beispiel könnte ein Workflow haben die URLs / workflow/app-name/page1, / workflow/app-name/page2, und so weiter. Jeder der die URLs mit einem Cache-Kennung zugeordnet werden. So, wenn Sie eine der URLs zu navigieren, finden Sie in der Navigation die zwischengespeicherten Daten mit der Workflow-Anwendung beteiligt werden. Denken Sie daran, die folgenden Punkte: • Verwendung des XMLHttpRequest-POST und GET-Kombination verhindert den gefürchteten HTTP "Post-Daten wieder" Dialogfeld. Sie können sich darauf, dass Ihre Kunden nicht zum Kauf wird das gleiche Element zweimal. • Durch die mit POST und als separate Schritte zu erhalten, können Sie die Effizienz der Web-Anwendung zu optimieren, da die Daten im Zusammenhang mit der GET-Cache gespeichert werden können. • Sie müssen nicht zu großen Änderungen an der Web-Anwendung zu machen, die Vorteile der separaten POST nehmen und, wie in der modifizierten HTML-Formular Beispiel erläutert. • In einem Zustand völliger Umsetzung Navigation, verwenden Sie einen zwei-URL Ansatz, bei dem eine URL definiert die HTML-Seite, und die zweite URL vertritt den Staat als Web-Service von der HTML-Seite. • In einem Zustand völliger Umsetzung Navigation, müssen die URLs für den Staat und der nächsten Seite algorithmisch definierbar sein. • Sie können diese Lösung kombiniert mit den Daten-Validierung Artikeln in Artikel 3 dargestellt. • So ordnen zwischengespeicherten Daten mit einer URL, sollten Sie keine Cookies, sondern nutzt eine spezielle Cache-Identifikatoren in der URL. Damit können Sie eine HTML-Seite articlemark und ihre assoziierten Staat zum späteren Nachschlagen. Ein Artikel eingereicht von Sonja Lande Disclaimer:Unsere Website ist nicht verantwortlich für den Inhalt dieses Artikels. Webarticles ist eine kostenlose Informationsquelle. Wichtig: Dieser Artikel "Nicht Senden Sie Ihre Formulare Ajax Them" wurde durch ein automatisches Software übersetzt. Wir fühlen uns leid für alle Rechtschreibfehler, die möglicherweise aufgetreten sind. Vielen Dank für Ihr Verständnis.
|
|||||
| Online: 201 users browsing the articles directory |
|
|