Destripando objetos Ajax

Después de ver la estructura de una página web con este destripador, intentaremos usar métodos similares para intentar "destripar" un objeto Ajax.

icono Introducción
icono Primeros pasos
icono Navegar Ajax
icono Errores XML
icono Conclusiones
icono Editar código
pluma

Introducción


En esta página, pretenderemos obtener toda la información necesaria sobre los objetos Ajax, desde saber si el navegador que usamos lo soporta, hasta el desglose de todos los objetos y atributos que puedan obtenerse del documento XML que nos sirve de ejemplo.

El documento XML que usaremos puede verse en este enlace: listado.xml. Además hemos creado un documento XML mal formado para descubrir las diferencias.

primeros pasos

Primeros pasos


Según la wikipedia, Ajax puede considerarse una combinación de tecnologías, y en ocasiones puede usarse un objeto iframe, pero nosotros usaremos solamente el objeto XMLHttpRequest

Las primeras implementaciones serán la declaración de un Objeto Ajax, y la creación de un fichero XML para que podamos destripar; también veremos los atributos que obtenemos de los objetos Ajax en su creación (antes de pedir datos al servidor).

navegando

Navegar desde el objeto Ajax


Una de las características más importante de Ajax, viene dado por su carácter asincrono, en donde la respuesta no la recibimos de forma inmediata, teniendo que estar pendiente del evento readystatechange; o sea dependiendo del atributo (variable) readyState.

Por cada evento de cambio de estado, crearemos un contenedor de datos para mostrar el valor de cada uno de los atributos obtenidos.

destripar con errores

Errores XML


Si el fichero XML que se lee con Ajax, está mal formado, los datos que recibimos dejan de ser fiables, así que la tecnología deja de ser eficiente. En las conclusiones veremos qué debemos hacer para evitar los XML mal formados en nuestras implementaciones.

Conclusiones

Conclusiones


Mostramos en esta pestaña las conclusiones a las que podemos llegar después de obtener los distintos atributos de los objetos Ajax

Se recomienda probar el código en los distintos navegadores.

editando

Editar código javascript


La pestaña "Editar código javascript" permite modificar el código javascript de la página y luego probarlo usando el botón "probar" que se encuentra al pie de la pestaña. Para usar el código original hay que pulsar el botón "enlazar".

Esta peculiar posibilidad no se recomienda usar a no ser de que se trate de un experimentado programador, ya que se pueden provocar errores no deseados... de todos modos podría ayudar a mejorar el código actual. Si alguien obtiene alguna mejora en el código, recomiendo que me lo haga saber.

pluma

Conclusiones


En esta pestaña mostramos las conclusiones obtenidas después de destripar los objetos Ajax en cada uno de sus estados.

Para reportar nuevas conclusiones para insertarlas en esta página pueden usar el formulario de comentarios, o exponerlo en el foro Ajax de foros del web.


Error en explorer

En principio, quienes hayan seguido la evolución del tema expuesto en foros del web con el título destripar objeto Ajax saben que el navegador explorer retornaba un error al querer recorrer los objetos Ajax en el último estado (readyState = 4) usando un bucle asociativo (for-in).

Para Solucionar el problema, hay que asignar el objeto Ajax a otra variable, de la forma:

_Ajax = new objetoAjax();
_Ajax.onreadystatechange = function()	{
	Ajax = _Ajax;
	for (i in Ajax)	{
		// así funciona también en explorer...
	}
}
...

Véase en el código fuente (pestaña "Editar código") que se ha duplicado la función destripe_final() para mantener una copia del código original.


XML mal formado

Cuando obtenemos datos de nuestro servidor que puedan tener caracteres que no admitan los documentos XML, se produce el error "XML mal formado". En la pestaña "Errores XML", hay un par de botones para crear un documento con errores, añadiendo el carácter & en el atributo web de la etiqueta item (la primera), y en la etiqueta web dependiente de ese primer item.

También existe otro botón para arreglar el problema; esta corrección consiste en encerrar el contenido que provoca error en una etiqueta CDATA inline, y el error en el atributo se arregla convirtiendo esos caracteres especiales en las respectivas secuencias aceptadas. Por ejemplo "&" debe ser "&". Esto se consigue con la función php htmlentities().

$web = (isset($_GET["web"])) ? $_GET["web"] : "";
$tag = (isset($_GET["blindar"])) ? "<![CDATA[$web]]>" : $web;
$attr = (isset($_GET["blindar"])) ? htmlspecialchars($web) : $web;

responseXML vs responseText

Aunque la "x" de Ajax se refiera a XML, es una particularidad poco usada (poco conocida tal vez). Una ventaja de responseText es que los datos se obtienen en el readyState = 3, y responseXML se carga de datos en el readyState = 4.

Aunque cuando se esperan datos estructurados, creo que es mejor obtenerlos en formato XML.

editando

Editar código javascript


En esta pestaña se puede ver el código javascript de esta propia página, pudiéndose modificar y probar, aunque se corre el riesgo de provocar errores inesperados.

A pie de pestaña hay un par de botones con el siguiente significado: "probar" hace que se ejecute el código con las modificaciones que se hagan en él desde la sesión actual. Si se quiere usar el código original de la página debe pulsarse el botón "enlazar".

Si se usa a conciencia, se puede aprender con el código de esta misma página... espero que lo disfruten.


Código