Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ajax
Ajax
ProgramacinconAJAX
Reconocimiento No comercial
JosAntonioMuozJimnez
jamj2000atgmaildotcom
Marzo2010
Pg. 1 de 24
Introduccin.
Qu es AJAX?
Dnde se utiliza?
Ventajas y desventajas
El formato XML
Conceptos de Javascript
Variables
Arrays
Diccionarios
Funciones y Eventos
El objet o XMLHttpRequest
Mtodos del objeto XMLHttpRequest para obtener informacin
open
setRequestHeader
send
Propiedades de mtodo XMLHttpRequest
onreadystatechange
readyState
responseText
responseXML
El objeto document
Mtodos para gestionar la informacin
getElementsByTagName
getElementById
getAttribute
La propiedad innerHTML
Compatibilidad con distintos navegadores
Pg. 2 de 24
Introduccin
AJAX es una tcnica de desarrollo web para crear aplicaciones interactivas que se ejecutan en el
cliente, es decir, en el navegador de los usuarios mientras se mantiene la comunicacin
asncrona con el servidor en segundo plano. De esta forma es posible realizar cambios sobre
las pginas sin necesidad de recargarlas, lo que significa aumentar la interactividad, velocidad y
usabilidad en las aplicaciones. Dicha tcnica es ampliamente utilizada en la Web 2.0.
AJAX signica
Asynchronous
Javascript
And
XML
Pueden verse ejemplos de aplicaciones web que hacen uso de AJAX en:
Google (Gmail, Google maps, Google docs, Google suggest, ...)
Flickr
Twitter
Digg y Reddit
Meebo
En este mini-tutorial encontraras diversos ejemplos que tratan distintos aspectos de AJAX.
Actividades propuestas
Pg. 3 de 24
El formato XML
La mayora de la comunicacin de datos en AJAX entre un servidor y un cliente web suele
realizarse en formato XML. Por ello es aconsejable adquirir un conocimiento bsico de este
formato. Este conocimiento podra resumirse de forma muy escueta en que todo documento
XML:
A un archivo XML puede asociarsele una hoja de estilo CSS, si lo indicamos en su cabecera
mediante
<?xmlstylesheettype="text/css"href="estilo.css"?>
Pg. 4 de 24
//EtiquetasHTML
*{margin:0px;padding:0px;}
#resultado{
overflow:auto;
width:500px;height:200px;
backgroundcolor:LightGrey;
border:1pxsolidBlack;
padding:10px;
}
Pg. 5 de 24
Actividades propuestas
Elaborar un nuevo archivo XML que muestre otro tipo de informacin, con su estilo CSS
asociado.
Actividades propuestas
Pg. 6 de 24
La forma tradicional
Mediante AJAX
La forma tradicional
Creamos un archivo ver.html y hacemos la peticin mediante un submit.
<html>
<head>
<metahttpequiv="ContentType"content="text/html;charset=UTF8"/>
</head>
<body>
<formaction="datos.php"method="get"enctype="text/plain">
<inputtype="submit"value="Obtenerdatos">
</form>
</body>
</html>
Pg. 7 de 24
Mediante AJAX
Creamos un archivo ver_ajax.html y hacemos la peticin en javascript.
<html>
<head>
<metahttpequiv="ContentType"content="text/html;charset=UTF8"/>
<scripttype="text/javascript">
vardatos;
functionpedir_datos(url){
datos=newXMLHttpRequest();
datos.onreadystatechange=mostrar_datos;
datos.open("GET",url,true);
datos.setRequestHeader("Contenttype","application/xwwwformurlencoded");
datos.setRequestHeader("Connection","close");
datos.send(null);
}
functionmostrar_datos(){
if(datos.readyState==4)
document.getElementById('resultado').innerHTML=datos.responseText;
}
</script>
</head>
<body>
<formaction="javascript:pedir_datos('datos.php');">
<inputtype="submit"value="Obtenerdatos">
</form>
<divid='resultado'></div>
</body>
</html>
Pg. 8 de 24
Observaciones
Aunque en principio pueda parecer que hay poca diferencia entre ambas formas de obtener y
mostrar la informacin y que incluso el uso de AJAX es algo ms complicado, existen diferencias
importantes.
Estas son:
Cuando usamos AJAX debemos tener una divisin o capa (DIV) en la cual mostraremos
los datos. Por ejemplo:
<divid='resultado'></div>
document.getElementById('resultado').innerHTML="<b>Aquvaelresultado</b>";
Resultado
El uso de AJAX nos permitir que el usuario tenga una experiencia ms fluida en la interaccin
con nuestro servidor web y dar a nuestras pginas un diseo ms profesional.
Ahora slo nos falta aadir una hoja de estilo a la pgina ver_ajax.html y tendremos nuestra
primera aplicacin AJAX medianamente decente.
<linkrel="stylesheet"type="text/css"href="estilo.css"/>
Pg. 9 de 24
<html>
<head>
<metahttpequiv="ContentType"content="text/html;charset=UTF8"/>
<linkrel="stylesheet"type="text/css"href="estilo.css"/>
<scripttype="text/javascript">
vardatos;
functionpedir_datos(url){
datos=newXMLHttpRequest();
datos.onreadystatechange=mostrar_datos;
datos.open("GET",url,true);
datos.setRequestHeader("Contenttype","application/xwwwformurlencoded");
datos.setRequestHeader("Connection","close");
datos.send(null);
}
functionmostrar_datos(){
if(datos.readyState==4)
document.getElementById('resultado').innerHTML=datos.responseText;
}
</script>
</head>
<body>
<formaction="javascript:pedir_datos('datos.php');">
<inputtype="submit"value="Obtenerdatos">
</form>
<divid='resultado'></div>
</body>
</html>
Pg. 10 de 24
Actividades propuestas
Modificar ver_ajax.html para que los datos se muestren en 2 capas distintas a la vez.
Modificar ver_ajax.html para que los datos se muestren en 4 capas distintas a la vez.
Conceptos de Javascript
Variables
En Javascript las variables no tienen tipo.
vardato;
dato=123;//ahoradatoesunentero
dato="Holaquetal!";//ahoradatoesunacadenadetexto
dato=newArray();//ahoradatoesunarray
dato={};//ahoradatoesundiccionario
Pg. 11 de 24
Actividades propuestas
functionmostrar_datos(){
if(datos.readyState==4){
vard=document.getElementsByTagName('div');
d[0].innerHTML=datos.responseText;
d[1].innerHTML=datos.responseText;
d[2].innerHTML=datos.responseText;
d[3].innerHTML=datos.responseText;
}
}
<body>
<form>
<inputtype="button"value="Obtenerdatos"onclick='pedir_datos("datos.php")'>
</form>
<div></div><br/>
<div></div><br/>
<div></div><br/>
<div></div><br/>
</body>
Escribe una pgina con el siguiente contenido. Haz una captura de pantalla de cada
mensaje de alerta que aparezca.
<html>
<head>
<scripttype="text/javascript">
vardireccion=newArray();
varnota={};
direccion[0]="Avda.";
direccion[1]="Estudiantes";
direccion[2]=99;
nota["Rocio"]="Sobresaliente";
nota["Eva"]="Notable";
nota["Jairo"]="Suficiente";
alert(direccion[0]+direccion[1]+direccion[2]);
alert(nota["Rocio"]+"<>Rocio\n"
+nota["Eva"]+"<>Eva\n"
+nota["Jairo"]+"<>Jairo\n");
</script>
</head>
<body></body>
</html>
Modificar el ejercicio anterior para que aparezca la direccin del alumno/a y su nota en el
mismo cuadro de alerta. Debe hacerse 3 veces (3 alumnos).
Pg. 12 de 24
Funciones y Eventos
El cdigo Javascript puede agruparse dentro de funciones. Por ejemplo mediante
functionpedir_datos(url){
datos=newXMLHttpRequest();
datos.onreadystatechange=mostrar_datos;
datos.open("GET",url,true);
datos.setRequestHeader("Contenttype","application/xwwwformurlencoded");
datos.setRequestHeader("Connection","close");
datos.send(null);
}
onAbort
Image
onBlur
onChange
onClick
onDblClick
document, Link
window
onError
Image, window
onFocus
onKeyDown
onKeyPress
onKeyUp
onLoad
onMouseDown
onMouseMove
onMouseOut
Layer, Link
onMouseOver
Layer, Link
onMouseUp
onMove
window
Pg. 13 de 24
onReset, onSubmit
Form
onResize
window
onSelect
Text, Textarea
"javascript:pedir_datos('datos.php');"
>
<inputtype="submit"value="Obtenerdatos">
</form>
"pedir_datos('datos.php');returnfalse;"
>
<inputtype="submit"value="Obtenerdatos">
</form>
<body>
<inputtype="button"value="Obtenerdatos"onclick=
"pedir_datos('datos.php')"
>
<divid='resultado'></div>
</body>
Al cargar la pgina
<bodyonload=
"pedir_datos('datos.php')"
>
<divid='resultado'></div>
</body>
<body>
<divid='resultado'onmouseover=
"pedir_datos('datos.php')"
></div>
</body>
<body>
<selectonchange=
"pedir_datos('datos.php')"
>
<option>Pedirdatos</option>
<option>Pedirotravez</option>
<option>Volverapedir</option>
</select>
<divid='resultado'></div>
</body>
Actividades propuestas
Pg. 14 de 24
El objeto XMLHttpRequest
datos=newXMLHttpRequest();
datos.onreadystatechange=mostrar_datos;
datos.open("GET",url,true);
datos.setRequestHeader("Contenttype","application/xwwwformurlencoded");
datos.setRequestHeader("Connection","close");
datos.send(null);
Observaciones
Observa que necesitamos una variable global datos donde se almacenar la informacin que
recibamos. Dicha variable ser utilizada despus por la funcin mostrar_datos(). Podra ser
necesaria asimismo para otras funciones.
Pg. 15 de 24
Mtodo GET
Con el mtodo GET los parmetros se pasan en la misma URL.
datos.open("GET","datos.php?curso=SMR2&tutor=Jos+Antonio",true);
datos.send(null);
Mtodo POST
Con el mtodo POST los parmetros se pasan con la funcin datos.send().
datos.open("POST","datos.php",true);
datos.send("curso=SMR2&tutor=Jos+Antonio");
Pg. 16 de 24
Ejemplos:
get.php
get.html
<?php
header('Contenttype:text/xml');
echo'<?xmlversion="1.0"encoding="UTF8"?>
<mensaje>Eltutordelcurso'.$_GET[curso].'es'.$_GET[tutor].'</mensaje>';
?>
post.php
post.html
<?php
header('Contenttype:text/xml');
echo'<?xmlversion="1.0"encoding="UTF8"?>
<mensaje>Eltutordelcurso'.$_POST[curso].'es'.$_POST[tutor].'</mensaje>';
?>
Pg. 17 de 24
get_ajax.html
functionpedir_datos(url,params){
datos=newXMLHttpRequest();
datos.onreadystatechange=mostrar_datos;
datos.open("GET",url+
'
+params
?'
,true);
datos.setRequestHeader("Contenttype","application/xwwwformurlencoded");
datos.setRequestHeader("Connection","close");
datos.send(null);
}
functionmostrar_datos(){
if(datos.readyState==4)
document.getElementById('resultado').innerHTML=datos.responseText;
}
functioniniciar(){
varurl='get.php';
varparams=f.curso.name+'='+f.curso.value+'&'+
f.tutor.name+'='+f.tutor.value;
pedir_datos(url,params);
}
</script>
</head>
<body>
<formname="f"method="get"action="javascript:iniciar()">
<label>Curso:</label>
<selectname="curso">
<optionvalue="SMR1">SMR1</option>
<optionvalue="SMR2"selected>SMR2</option>
</select>
<label>Tutor:</label>
<inputtype="text"name="tutor"value="JosAntonio"/>
<inputtype="submit"name="submit"value="OK"/>
</form>
<divid="resultado"></div>
</html>
Pg. 18 de 24
post_ajax.html
Actividades propuestas
Modifica el ltimo ejemplo para que devuelva una lista de alumnos distinta dependiendo
del curso.
Pg. 19 de 24
El objeto document
La condicin
if(datos.readyState==4&&datos.status==200)
comprueba que existe una respuesta completa del servidor (datos.readyState == 4) y que dicha
respuesta es satisfactoria (datos.status == 200).
Los valores para datos.readyState son:
0.
1.
2.
3.
4.
200.
403. Indica que el servidor entendi la peticin HTTP, pero no puede llevarla a cabo.
Por ejemplo, debido a un problema de permisos.
404.
La sentencia
document.getElementById('resultado').innerHTML=datos.responseText;
Los datos de cada alumno se guardan en la variable local a[i]. Para acceder a los datos entre la
etiqueta de inicio y la de cierre se utiliza
a[i].firstChild.data
Pg. 21 de 24
La siguiente funcin nos mostrar los datos entre las etiquetas de inicio y cierre y el valor de los
atributos edad y sexo.
functionmostrar_datos(){
vara=newArray();
if(datos.readyState==4){
a=datos.responseXML.getElementsByTagName("alumno");
for(i=0;i<a.length;i++)
document.getElementById('resultado').innerHTML
+=a[i].firstChild.data
+"edad="+a[i].getAttribute('edad')
+"sexo="+a[i].getAttribute('sexo')
+"<br/>";
}
}
Actividades propuestas
Modificar el archivo datos.php para que aparezcan al menos 10 alumnos/as con los
atributos de edad y sexo.
Modificar el archivo ver_ajax.html para que se muestren slo las lneas pares.
Modificar el archivo ver_ajax.html para que se muestren slo los alumnos/as mayores de
18 aos.
Pg. 22 de 24
Actividades propuestas
Elaborar una aplicacin AJAX que sea compatible con todos los navegadores y que
emplee los conocimientos vistos en este tema.
Pg. 23 de 24
Referencias
Javascript
http://en.wikipedia.org/wiki/JavaScript
http://www.webdesigntoolslist.com/2009/04/webmastertools/javascript-cheatsheets-quick-reference-guides-for-javascript-webmasters-coders-web-developersdesigners/
http://es.wikipedia.org/wiki/JavaScript
http://www.elcodigo.net/cgi-bin/DBread.cgi?
tabla=herramientas&campo=0&clave=49&info=1
AJAX
http://en.wikipedia.org/wiki/Ajax_(programming)
http://www.noupe.com/ajax/how-ajax-works.html
http://es.wikipedia.org/wiki/AJAX
www.huibert-aalbers.com/IT_Insight/Spanish/PDF/ITI006Sp-AJAX.pdf
http://www.elrincondeajax.com/manual-ajax/
http://www.ajaxhispano.com/quien-usa-ajax.html
http://www.ajaxhispano.com/ajax-nuevo-acercamiento-aplicaciones-web.html
Pg. 24 de 24