Para terminar voy a comentar algo sobre las cachés...

Cuando envías una petición AJAX (o no AJAX) al servidor es posible que si la caché del lado servidor no esté corrrectamente configurada el navegador realice su propia caché y por lo tanto la llamada no llegue al servidor jamás. Eso puede ser estupendo (muchas veces es lo que querremos para ahorrar procesamiento) y otras puede ser una maldición ya que no obtendremos los datos actualizados.

Otra cosa a tener en cuenta es que algunos proveedores utilizan en su red dispositivos proxy-caché que no están bajo nuestro control. Éstos no funcionan todo lo bien que debieran o al menos no respetan las configuraciones de servidor como es debido y hay veces que las peticiones se pierden en el Limbo de los justos.

A la hora de enviar datos por POST como hemos visto en el post anterior, no hay problema. El verdadero problema está en las peticiones GET, por otro lado las más habituales.

Si el servidor tiene bien configurada la caché (es decir, indica cuándo caducan los contenidos o marcamos en IIS que éstos caduquen inmediatamente) no deberíamos experimentar fallos, salvando lo comentado respecto a los proxy-caché de algunos proveedores.

Si queremos asegurarnos de que la petición va a llegar a su destino podemos hacer fundamentalmente dos cosas:

1.- Agregar una cabecera que indique que se debe obtener el contenido siempre que éste sea posterior a una fecha antigua, por ejemplo así:

http.setRequestHeader('If-Modified-Since', 'Wed, 1 Jan 2003 00:00:00 GMT');

2.- Añadir un número aleatorio (o cadena) a la URL de cada petición.

Suele funcionar muy bien el agregarle una marca temporal, es decir, añadir a continuación la fehca y hora actuales, de modo que cada una de las peticiones que se hagan va a ser diferente y por lo tanto los caché que existan por el medio tienen que repetir siempre la petición. Por ejemplo:

http.open("POST", "http://www.miserv.com/misdatos.aspx?pasacache=" + new Date().getTime(), true)

Se le añade un parámetro que lleva como valor la fecha y hora en formato numérico (es decir, un número muy largo y que varía varias veces cada milisegundo), por lo que es muy difícil que se den dos peticiones idénticas incluso a través de un proxy-caché. Además ese parámetro extra de nombre inventado que nosotros le añadimos no debería afectar en absoluto a la llamada puesto que no está siendo tenido en cuenta por la aplicación.

Esta segunda técnica es, para mi, la más recomendable, aunque tal vez sea un poco más tediosa de implementar.

--------------

Con esta séptima entrega acabo la mini-serie sobre AJAX "a pelo". Posteriormente me gustaría continuarla con técnicas AJAX que no incluyan el uso directo de XmlHttpRequest sinoque utilicen bibliotecas o técnicas específicas, centrándome especialmente en ASP.NET.

¡Sigue atento a este blog! :-)

💪🏻 ¿Este post te ha ayudado?, ¿has aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y mucho mejor

Escrito por un humano, no por una IA