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.
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.
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).
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.
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.
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.
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.
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.
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.
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;
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.
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.