2009-01-23 33 views
11

Ahora que la mayoría de navegadores modernos admiten solicitudes AJAX y del lado del cliente sin realizar un POST, ¿cuál es el rol de POST (publicación de formulario)?POST versus llamada Ajax

¿Hay situaciones o reglas generales cuando un POST siempre será preferido a un XmlHttpRequest?

Todo lo que POST está haciendo es colocar pares de valores de clave variable dentro del servidor. Las ventajas de POST en las que puedo pensar son grandes cantidades de datos y navegadores móviles. ¿Hay muchos otros que me estoy perdiendo?

N.B. Sé que puede realizar POST con llamadas AJAX, estoy hablando principalmente de una etiqueta <form>

Respuesta

19

Esta pregunta es un poco complicada porque combina dos conceptos. El primero es POSTing y el segundo es Ajax. POSTing, en comparación con GETting, es un método HTTP diferente con diferentes implementaciones y semántica. Ajax, o XmlHttpRequest, tiene su contraparte en la solicitud/navegación normal. Puede usar POST o GET tanto para XmlHttpRequest como para la navegación normal y el envío de formularios (bueno, POST es siempre un "envío de formularios"). La diferencia entre XmlHttpRequest y las solicitudes normales es que una solicitud normal reemplaza la página con una página nueva.

Puede escribir casi cualquier sitio web usando solo Ajax para obtener datos y cambiar el DOM; eso es principalmente cómo funciona Gmail. No hay "presentaciones de formularios" en el sentido tradicional. Pero todavía hay GET y POST porque el servidor y los navegadores interpretan los resultados de manera diferente. Se supone que GET es idempotente; POST está diseñado para operaciones que cambian el estado en el servidor. Por ejemplo, una transacción ecom debe ser un POST. Esto no cambia cuando se usa Ajax porque quiere que los servidores proxy también comprendan que se trata de un POST y que no deberían tratar de almacenar en caché la respuesta.

También existen ventajas y desventajas al usar GET frente a POST. No puede marcar los resultados de una POST porque los parámetros están ocultos. No se puede OBTENER algo con valores de parámetros de longitud ilimitada porque IE solo admite unos 2000 caracteres.

También hay desventajas al uso de Ajax frente a envíos normales; no puede marcar la página resultante (porque la página no ha cambiado); el botón Atrás no funcionará como se esperaba. Pero con Ajax podría minimizar los datos transferidos y también proporcionar actualizaciones convenientes para una página (como monitorear el estado de un proceso largo) sin molestos parpadeos o refrescantes.

En resumen, los dos tipos de solicitud, Ajax y presentación de formulario tradicional, se pueden usar con GET y POST, y existen ventajas y desventajas para cada uno. Ningún tipo puede hacer todo lo que el otro puede hacer, por lo que puede esperar ver una combinación en el futuro previsible.

2

Si necesita actualizar toda la página, una publicación probablemente sería más fácil.

13

Algunas acciones no se pueden llevar a cabo mediante solicitudes AJAX debido a restricciones de seguridad. Por ejemplo, cargar archivos no se puede hacer con AJAX.

+0

No pensé en eso, buen punto. – kemiller2002

+2

jQuery creará automáticamente un iframe y un formulario en el iframe, y POST ese formulario, si detecta una carga de archivo dentro de la solicitud de Ajax. –

+3

Aún así, eso sigue siendo un POST, que era mi punto. – Welbog

1

El diferenciador clave es que el POST de un formulario envía datos y puede navegar a un nuevo URL en un solo viaje de ida y vuelta al servidor. Ajax puede enviar datos pero no puede navegar a la página nueva.

+0

¿No pudo usar window.location.href = xx después de que la llamada fue exitosa? –

+0

@Chris, que genera un GET, que sería un segundo viaje de ida y vuelta al servidor. –

+0

@James Por lo general, una buena práctica es que cualquier POST que no sea ajax debería terminar con una redirección. Esto se hace para evitar volver a enviar el formulario al volver a cargar la página. Si sigue esta buena práctica, la redirección es de segundo viaje de ida y vuelta al servidor de todos modos. –

0

Er .. ¿publicar formularios?

La publicación es realmente buena para las formas grandes, ya que los valores están ocultos en los encabezados html y no se insertan en la cadena url?

+0

Puedes usar SOAP para Ajax aunque –

0

En teoría, un HTTP GET debe ser una solicitud idempotente de información: dos GET idénticos deben devolver la misma información.

HTTP POSTS, por otro lado, están destinados a mantener el estado y realizar acciones: Dos POST idénticos pueden realizar diferentes acciones dependiendo de quién lo hace, qué se hizo antes y cuándo se está realizando.

0

Voy a responder mi propia pregunta con this video Recientemente tropecé con Doug Crockford. Él describe el subibaja entre todos los ajax y todas las actualizaciones de página.