No enviar sus formularios Ajax Them

Tsu artículo se centra tanto en la solución del problema de transmisión de datos utilizando HTTP POST, y en la definición de un estado que se asocia con una página HTML. Este artículo cubre los siguientes temas:

• Explicación de los problemas relacionados con los puestos de HTTP

• Cómo solucionar los problemas relacionados con HTTP POST

• Ilustración de una arquitectura de flujo de trabajo

  

• Asociación de estado con un controlador de

Problema Usted desea utilizar Ajax para resolver algunos de los problemas asociados con la presentación de formularios de la manera tradicional con POST.

Teoría

Solución Los marcos de aplicaciones Web se han ido a grandes extensiones de resolver el problema de HTTP POST. Usted necesita mirar más allá del marco ASP.NET para ver la complejidad implicada en asegurarse de que la parte posterior del navegador o botones Refresh no causan una montaña de problemas con respecto al estado del lado del servidor. ASP.NET no es el culpable, porque sus creadores estaban tratando de colocar una arquitectura dinámica en la infraestructura de una antigua web estática. La suma de los siguientes puntos de la ventaja de utilizar este enfoque:

• Los datos se envían al servidor de una sola vez, y sólo si el usuario presiona el botón Enviar formulario.

• El servidor de lado un estado de la aplicación que se puede utilizar HTTP GET a llamar cada vez que se conoce como una página HTML en particular. Por lo tanto, puede utilizar el navegador y volver los botones de Forth para moverse entre las páginas sin necesidad de corromper a la página de estado del lado del servidor o del lado del cliente de HTML.

La conversión de la POST Utilizar el XMLHttpRequest Objeto

La solución al problema de HTTP POST, es simple, pero requiere de la habilidad de usar el objeto XMLHttpRequest. En esta sección, usted aprenderá cómo convertir la aplicación original de utilizar la nueva arquitectura. Las páginas originales y nuevos HTML se muestra en un nivel de código. La idea de esta sección es ilustrar la conversión.

El formulario HTML original

El formulario HTML original utilizado un HTTP POST, y se ilustra de la siguiente manera:

 Título 
action = "/ artículos ajaxrest / Arquitectura / forms / Posted.ashx" method = "POST">

Los atributos de la forma en negrita indican que cuando el botón Enviar se presiona, la URL / artículos ajaxrest / Arquitectura / forms / Posted.ashx se llama usando un poste. De transferencia de un Estado de representación (REST), punto de vista, la dirección sólo acepta un solo verbo, POST. Este es el corazón del problema en que no se puede recuperar la página mediante un GET, que es el verbo HTTP utilizado por defecto por un navegador.

El formulario HTML convertido

El formulario HTML convertido utiliza el HTML mismo construye, pero los delegados de la POST a un XMLHttpRequest y recupera la siguiente página con un GET. El código siguiente muestra el formulario HTML convertir:

 Título 
   
   
type = "botón" value = "Enviar" onclick = "OnSubmit ()"/>

Las partes importantes modificada de la página HTML se muestran en negrita. El cambio global ha sido la de convertir el tipo de entrada de presentar al botón, y tener el botón de la aplicación del evento de clic. El evento, haga clic en las llamadas OnSubmit y es responsable de hacer un POST y GET. OnSubmit Cuando se llama a la función RepresentationManager.iterateHTML.get se llama, que se utiliza para extraer el estado de los elementos de formulario HTML. Normalmente, cuando se utiliza el formulario HTML anteriores a presentar la técnica, el navegador gestiona la extracción de la situación de la forma HTML. Es más complicado para realizar una extracción de costumbre, pero nos da la ventaja añadida de ser capaz de extraer el estado de otros elementos de HTML, como elementos div o span. Tienes que pensar de una llamada al método GET como un estado general de extracción que se asigna a un objeto de JavaScript.

Cuando el objeto de JavaScript que contiene el estado ha sido creado, es necesario convertir el objeto en una interfaz de gráficos por ordenador (CGI)-codificados cadena de consulta. La función Ops.serializeCGI lleva a cabo la conversión. Una vez más, necesita realizar una serialización personalizada, pero usted tiene la flexibilidad añadida de serializar a un CGI-cadena de consulta codificado, un persistió JavaScript Object Notation (JSON), o incluso una cadena XML. Entonces, cuando usted tiene la cadena de consulta CGI, utiliza el código que queda en OnSubmit a POST los datos al servidor. Observe que la dirección URL de POST usado es de la forma HTML. Una vez que el POST se ha completado en la aplicación del método onComplete, el location.href se le asigna la dirección URL que se envió a.

Aquí es donde usted podría ser confuso. ¿Por qué primer post y luego tienen la misma URL? Puede parecer más eficaz para llevar a cabo un solo puesto o GET. La razón de la ejecución de los dos verbos se debe al navegador de la historia. El POST es ejecutado por el objeto XMLHttpRequest, y no por lo que parte de la historia del navegador. El POST se utiliza para crear un estado en el servidor y, a continuación, el navegador ejecuta el GET, de modo que la página está registrada en el historial del navegador. Como resultado, el navegador tiene dos consigue de la historia, en lugar de GET y POST, como fue el caso en el ejemplo de HTML original forma. Cuando se tienen dos consigue de la historia, no necesita enviar al servidor de estado, como se recupera el estado. El cliente sigue llamando la misma URL, pero la funcionalidad de la dirección URL del servidor ha cambiado. En el ejemplo de código HTML modificado la forma, el servidor tiene que reaccionar a un poste y un GET. Sin embargo, el servidor debe asociar un Estado con la solicitud, que no era necesario en el caso de la forma HTML original. En el formulario HTML original, el Estado se ha generado con cada tema. Asociar un estado con la petición de que no es difícil y sólo requiere el uso de la aplicación Web proporcionado mecanismo de la sesión. Tienes que cambiar el código de servidor de forma que la información generada por el POST se almacena en la sesión y se recupera cuando el AEC se llama. El código siguiente muestra una aplicación extremadamente simple del código de Serverside original:

public void ProcessRequest (CTX HttpContext) (ctx.Response.ContentType = "text / html"; ctx.Response.Write ( "  Usted escribió "+ ctx.Request [" ejemplo "] +"  ");) Aquí está el código del servidor vez: public void ProcessRequest (CTX HttpContext) (ctx.Response.ContentType =" text / html ", si (ctx.Request.HttpMethod ==" POST ") (ctx.Session.Add ( "ejemplo", ctx.Request [ "ejemplo"]); ctx.Response.Write ( ",  Usted escribió "+ ctx.Request [" ejemplo "] +"  ");) Else if (ctx.Request.HttpMethod ==" GET ") (ctx.Response.Write ("  Usted escribió "+ ctx.Session [" ejemplo "] +"  ");))

El ejemplo está codificada mediante ASP.NET, pero incluso si no eres un programador de ASP.NET, debe ser capaz de seguir la explicación. En la implementación original de ProcessRequest, se esperaba que se llama al método que utiliza una entrada. Para generar el contenido, extraer la variable de ejemplo, utilizando el método de ctx.Request. Dado que la aplicación original de ProcessRequest está definido, no hay memoria de haber sido llamado con anterioridad. La salida generada depende de los parámetros enviados en el puesto. El código original se consideran peligrosos, porque se supone que un puesto. Si se ejecuta un GET, entonces surgirán problemas, porque un estado incoherente será definido. En el código fuente modificado, en primer lugar prueba el verbo HTTP que se está llamando (ctx.Request. HttpMethod). Si se llama un HTTP POST, a continuación, el contenido generado es como el ejemplo de formulario HTML original, y el estado se guarda en el período de sesiones (ctx.Session). Si un HTTP GET que se llama, entonces el contenido generado es similar al puesto, salvo que el Estado se recupera de la sesión.

Formas de envío y REST

En el ejemplo modificado, la dirección utiliza / artículos ajaxrest / formas de arquitectura / / AjaxPosted.ashx y utiliza un período de sesiones. El problema con este enfoque es que las cookies HTTP se utilizan para determinar lo que se genera contenido. La solución se utilizará para ilustrar que relativamente se puede modificar fácilmente una aplicación existente que utiliza un post en el que utiliza Ajax combinado POST y GET. A continuación, modificar el POST y GET combinación para no utilizar variables de sesión. O, para decirlo de manera más sucinta, está bien para utilizar las variables de sesión, siempre y cuando no utiliza cookies. Por ejemplo, en la arquitectura de ASP.NET, es posible que las variables de sesión modificar la dirección URL para incluir un identificador que las referencias cruzadas a una variable de sesión. Contar con la infraestructura modificar la dirección URL hace posible articlemark la dirección y referencia que en algún momento posterior en el tiempo. Sin embargo, se encontrará con un problema si usted utiliza variables de sesión que el tiempo de espera. Una oportuna salida variable de sesión, incluso si no utiliza cookies, es problemático, porque los usuarios pueden tener articlemarked la dirección y descubrió más tarde que no pueden hacer referencia a ella. Es posible que acaba de configurar la variable de sesión en el tiempo de espera desde hace mucho tiempo a partir de ahora, pero esto no resuelve el problema de la eventual desaparición del Estado. En el caso de este artículo, la última cosa que queremos que suceda es la desaparición del Estado.

Por lo tanto, es necesario re-arquitecto del servidor para utilizar una memoria caché en lugar de variables de sesión. La ventaja de la caché es que te da la habilidad de controlar cuando un pedazo de estado permanece y es eliminado. El siguiente problema es un poco más complicado. En el ejemplo modificado de la forma HTML, la página PostAjax.ashx respondió a un GET o POST. Cuando el GET se llamaba, el estado de la página HTML y la página HTML se combinaron en un solo paso. En el artículo 5, usted sabe que la combinación de la página HTML con su estado está equivocado. Usted quiere ser capaz de cargarse el Estado como llamada de servicio AWeb. Esto significa dos URL son necesarias. El "Apoyo a páginas HTML con URL relativas sección" en el artículo 5 se muestra cómo manejar las dos direcciones URL.

• / workflow/page1/1234: Esta dirección se utiliza para descargar la página HTML que se muestra en el navegador. La URL sólo es compatible con el verbo GET, ya que se utiliza para descargar el contenido HTML desde el servidor.

• / services/workflow/page1/1234: Esta dirección apoya tanto la POST y GET verbos y es el estado asociado a la página HTML URL. El estado de URL se crea utilizando las técnicas explicadas en la sección "Apoyo a páginas HTML con URL relativas" en el artículo 5. Los dos URLs de ejemplo se adjuntan con el número 1234, que representa el identificador único de datos en caché se utiliza cuando la carga del estado. En el estado y la solución de la página HTML, el estado creado por una página HTML se delega a otra página. Mirar hacia atrás en el código del ejemplo de código HTML modificado la forma. El estado de la página HTML que está asociada con la página de PostAjax.ashx. Con el estado y la solución de la página HTML, el Estado tiene que estar asociada con la página, y por lo tanto la aplicación de los cambios modificada de formulario HTML ejemplo un poco a lo siguiente:

 Título 
   onload = "Initialize ()"> 

El código en negrita muestra las piezas adicionales necesarias para aplicar el estado y la solución de la página HTML. Como se explica en el artículo 5, cuando la página se ha cargado por completo, se activa el evento body.onload y llama a la función initialize. Llamar a los resultados Iniciar en el estado se recuperan con la dirección URL de forma dinámica calcula utilizando el URLEngine función. ServicesURL. Cuando el estado se ha recuperado, que se guardan y se asignó a la página HTML utilizando el serializeFromCGI métodos y iterateHTML.set. La aplicación de OnSubmit sigue siendo el mismo, con la modificación de aminor ser la dirección donde el Estado es de ser enviados. La URL de POST tiene que ser la misma que la utilizada para recuperar los datos en la función de inicialización. La siguiente página que se carga después de que el Estado sigue siendo el mismo, se puede modificar a su gusto.

La dirección URL que determina las órdenes de la página siguiente una pequeña discusión. En el caso del código HTML, el URL cargado / artículos ajaxrest / formas de arquitectura / / AjaxPosted.ashx. La URL no se adjunta con un identificador de caché, lo que significa que la dirección no está asociado con ningún Estado. En el ejemplo de código HTML modificado la forma, una "cookie" se define el estado que se asocia con la URL. Dado que no se esté usando cookies, la dirección no tiene estado. Si esta es su efecto deseado, entonces puede dejar el código tal como está. Sin embargo, esto no es probablemente el efecto deseado, lo que es necesario asociar el identificador de cache con la URL. Por lo tanto, la dirección debe ser / AJAX articles/architecture/forms/1234 / AjaxPosted.ashx o algo por el estilo. La primera cosa importante es que el identificador único de caché está incluido en el URL. Sin embargo, la dirección no es modificable, por lo que necesita para modificar dinámicamente, al igual que el enfoque se ilustra en el artículo 5. En pocas palabras, es necesario definir los grupos de URLs. Por ejemplo, un flujo de trabajo podría tener la URL / workflow/app-name/page1, / workflow/app-name/page2, y así sucesivamente. Cada una de las URL que se asocie con un identificador de cache. Así, cada vez que durante una de las URL, se le navegando los datos en caché asociada a la aplicación de flujo de trabajo.

Recuerde los puntos siguientes:

• Uso de la POST y GET XMLHttpRequest combinación evita el temido HTTP "Post data de nuevo" cuadro de diálogo. Usted puede estar tranquilo de que sus clientes no podrán comprar el mismo tema dos veces.

• Al tener POST y GET en pasos separados, puede optimizar la eficiencia de la aplicación Web, ya que los datos asociados con el GET pueden ser almacenados en caché.

• Usted no necesita hacer grandes cambios para la aplicación Web para aprovechar de la POST y GET por separado, como se ilustra en el ejemplo de código HTML modificado la forma.

• En un completo estado de implantación de la navegación, utilizar un enfoque de dirección, donde se define la URL de la página HTML, y el segundo URL representa el estado del servicio web llamado por la página HTML.

• En un completo estado de implantación de la navegación, las direcciones URL para el Estado y la siguiente página deben ser algorítmicamente definible.

• Usted puede combinar esta solución con la validación de datos de artículos que se ilustra en el artículo 3.

• Para asociar los datos en caché con una dirección URL, no se debe utilizar "cookies", sino que el uso de identificadores únicos en caché en la URL. Esto le permite articlemark una página HTML y su estado asociado para referencia posterior.

un artículo presentado por Sonja Lande


Descargo de responsabilidad:Nuestro sitio web no es responsable por el contenido de este artículo. Webarticles es un recurso de información gratuito.
Importante: Este artículo "No enviar sus formularios Ajax Them" fue traducida por un software automático. Sentimos pena por los errores de ortografía que pueda haber ocurrido. Gracias por su comprensión.


Online: 373 users browsing the articles directory