Description: Podemos oírte decir: "Entonces, ¿cuál es el problema?" Bueno, usar XHR y trabajar de manera asincrónica con el servidor le permite crear aplicaciones web que son mucho más dinámicas. Por ejemplo, supongamos que tiene un menú desplegable que se completa según la entrada en algún otro campo o menú desplegable. Por lo general, tendría que enviar todos los datos al cliente cuando la página se cargó por primera vez y usar JavaScript para completar su menú desplegable según la entrada. No es difícil de hacer, pero aumenta el tamaño de su página y, dependiendo de cuán dinámica sea la lista desplegable, el tamaño podría ser un problema. Con Ajax, cuando el campo de activación cambia o se pierde el enfoque, puede realizar una solicitud simple al servidor solo para obtener la información que necesita para actualizar su menú desplegable. Imagínese las posibilidades de validación solo. ¿Cuántas veces ha escrito alguna lógica de validación de JavaScript? Si bien la edición puede ser simple en Java o C #, la falta de depuradores decentes, combinada con la escritura débil de JavaScript, puede hacer que escribirlos en JavaScript sea un verdadero problema y propenso a errores. ¿Con qué frecuencia estas reglas de validación del lado del cliente duplican ediciones en el servidor? Con XHR, puede realizar una llamada al servidor y activar un conjunto de reglas de validación. Estas reglas pueden ser mucho más ricas y complejas que cualquier cosa que escribiría en JavaScript, y tiene todo el poder de los depuradores y los entornos de desarrollo integrados (IDE). Podemos escuchar a algunos de ustedes ahora: "He estado haciendo eso durante años con IFRAMES o marcos ocultos". Incluso hemos utilizado esta técnica en particular como una forma de publicar o actualizar partes de una página en lugar de todo el navegador, y la verdad es que funciona. Sin embargo, muchos considerarían este enfoque como un truco para sortear la falta original de compatibilidad entre navegadores de XHR. El objeto XHR que es el corazón de Ajax está verdaderamente diseñado para permitir la recuperación asincrónica de datos arbitrarios del servidor.