por una necesidad: • Outlook Web Access (MS Exchange Server 2000) • Solución: Remote Scripting (1998) • Inclusión de un control ActiveX en IE [Hopmann(2007)] • Biblioteca MSXML • El término lo acuña Jesse James Garrett en 20051 • Muy vinculado a la Web 2.0 • GMail • Live mail • Blinklist • ... 1Ajax: A New Approach to Web Applications [Garrett(2005)] Oscar Cubo Medina Programación Web en Servidor AJAX
es necesario actualizar una parte de la página sin tener que recargarla completamente. • Carga de detalles de un elemento en un listado Oscar Cubo Medina Programación Web en Servidor AJAX
es necesario actualizar una parte de la página sin tener que recargarla completamente. • Carga de detalles de un elemento en un listado • Ejecución de múltiples acciones (dar de alta + asociar) Oscar Cubo Medina Programación Web en Servidor AJAX
es necesario actualizar una parte de la página sin tener que recargarla completamente. • Carga de detalles de un elemento en un listado • Ejecución de múltiples acciones (dar de alta + asociar) • Generación de listas ordenadas Oscar Cubo Medina Programación Web en Servidor AJAX
es necesario actualizar una parte de la página sin tener que recargarla completamente. • Carga de detalles de un elemento en un listado • Ejecución de múltiples acciones (dar de alta + asociar) • Generación de listas ordenadas • Votación + actualización de resultados Oscar Cubo Medina Programación Web en Servidor AJAX
es necesario actualizar una parte de la página sin tener que recargarla completamente. • Carga de detalles de un elemento en un listado • Ejecución de múltiples acciones (dar de alta + asociar) • Generación de listas ordenadas • Votación + actualización de resultados • ¿...? Oscar Cubo Medina Programación Web en Servidor AJAX
experiencia de usuario • Recuperación asíncrona • Interfaz de escritorio en la web • Menos ancho de banda • Menos proceso en el servidor • No precisa plugins Inconvenientes • Problemas de accesibilidad, compatibilidad, seguridad... • Pérdida de funcionalidades del navegador • Historial • Favoritos o bookmarks • Más peticiones al servidor • Latencia de la red Oscar Cubo Medina Programación Web en Servidor AJAX
conjunto de técnicas ya existentes • (X)HTML • CSS • Javascript • DHTML • DOM • Objeto XMLHttpRequest Oscar Cubo Medina Programación Web en Servidor AJAX
peticiones Web desde javascript • Incluido originalmente sólo en IE • Actualmente soportado en la API de javascript Oscar Cubo Medina Programación Web en Servidor AJAX
peticiones Web desde javascript • Incluido originalmente sólo en IE • Actualmente soportado en la API de javascript Problemas con codificación Es necesario especificar la codificación de todas las transferencias: header(’Content-Type: application/xhtml+xml; charset=ISO-8859-1’); Si no se indica nada se considera UTF-8. Oscar Cubo Medina Programación Web en Servidor AJAX
un canal de comunicación con el servidor open ( método, url, [asincrono], [usuario], [clave] ) Send • Envía datos a través de una conexión ya establecida send (datos) Oscar Cubo Medina Programación Web en Servidor AJAX
por el servidor responseXML Equivalente a la anterior pero con formato DOM Control de operación status Código de respuesta del servidor (código HTML) statusText Texto asociado al código de respuesta Oscar Cubo Medina Programación Web en Servidor AJAX
readyState Estado de la petición onreadystatechange Función que se ejecuta al finalizar una petición asíncrona Código Significado 0 Sin inicializar (uninitialized) 1 Abierta conexión (opened) 2 Enviada petición (sent) 3 Recibiendo datos (receiving) 4 Cargado (loaded) Oscar Cubo Medina Programación Web en Servidor AJAX
Open 0 1 new XmlHttpRequest Open Send 0 1 2 new XmlHttpRequest Open Send Petición 0 1 2 new XmlHttpRequest Open Send Petición Respuesta 0 1 2 3 Oscar Cubo Medina Programación Web en Servidor AJAX
Open 0 1 new XmlHttpRequest Open Send 0 1 2 new XmlHttpRequest Open Send Petición 0 1 2 new XmlHttpRequest Open Send Petición Respuesta 0 1 2 3 new XmlHttpRequest Open Send Petición Respuesta 0 1 2 3 4 Oscar Cubo Medina Programación Web en Servidor AJAX
Open 0 1 new XmlHttpRequest Open Send 0 1 2 new XmlHttpRequest Open Send Petición 0 1 2 new XmlHttpRequest Open Send Petición Respuesta 0 1 2 3 new XmlHttpRequest Open Send Petición Respuesta 0 1 2 3 4 new XmlHttpRequest Open Send onreadystatechange Petición Respuesta 0 1 2 3 4 Oscar Cubo Medina Programación Web en Servidor AJAX
objeto // ¿ Existe en la API ? if (window.XMLHttpRequest) { // Usar API http = new XMLHttpRequest(); } else { // Usar ActiveX (IE<7) http = new ActiveXObject ("Microsoft.XMLHTTP"); } // if Oscar Cubo Medina Programación Web en Servidor AJAX
información // Función de finalización http.onreadystatechange = fn; // Abrir la conexión http.open("GET", "http://url/", true); // Enviar la petición http.send(null); Oscar Cubo Medina Programación Web en Servidor AJAX
recepción function fn() { // Se comprueba el fin de la carga if ( http.readyState == 4 ) { if (http.status == 200) { // OK // Proceso de datos // Mostrar resultado } else { alert(http.statusText); // Error } // if } // if } Oscar Cubo Medina Programación Web en Servidor AJAX
simplificado • Recubre objeto XMLHttpRequest • Control automático y transparente • Enteramente javascript • Poco peso «SACK is exactly what it says it is: A simple set of code to allow you to put AJAX into your webpages with none of the fuss or overhead of other packages. Just AJAX, just simple.» Oscar Cubo Medina Programación Web en Servidor AJAX
Amartino. AJAX un nuevo acercamiento a aplicaciones web, 2005. URL http://www.uberbin.net/archivos/internet/ ajax-un-nuevo-acercamiento-a-aplicaciones-web.php. Jesse James Garrett. Ajax: A new approach to web applications, 2005. URL http://www.adaptivepath.com/publications/essays/ archives/000385.php. Alex Hopmann. The story of XMLHTTP, 2007. URL http://www.alexhopmann.com/xmlhttp.htm. Wikipedia. AJAX — Wikipedia, La enciclopedia libre, 2007. URL http://es.wikipedia.org/wiki/AJAX. Oscar Cubo Medina Programación Web en Servidor AJAX
requisitos 2 Estructura de directorios 3 Estructura de la interfaz 4 Identificar las operaciones AJAX Oscar Cubo Medina Programación Web en Servidor AJAX
requisitos 2 Estructura de directorios 3 Estructura de la interfaz 4 Identificar las operaciones AJAX Ciclo de implementación 1 Crear la estructura de interfaz 2 Crear el objeto AJAX (sin operaciones) 3 Implementar cada operación por separado 4 Pruebas Oscar Cubo Medina Programación Web en Servidor AJAX
• Aplicación que calcule operaciones matemáticas. Sumatorio Suma de los valores de 1 a x x = x + (x − 1) + (x − 2) + · · · + 2 + 1 Factorial Producto de los valores de 1 a x x! = x · (x − 1)! = x · (x − 1) · (x − 2) · . . . · 2 · 1 Fibonacci2 Es la serie matemática 1, 1, 2, 3, 5, 8, 13, 21, · · · F (x) = F (x − 1) + F (x − 2) • Actualización en tiempo realTM 2 http://es.wikipedia.org/wiki/Sucesión_de_Fibonacci Oscar Cubo Medina Programación Web en Servidor AJAX
documento <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> Oscar Cubo Medina Programación Web en Servidor AJAX
I Estructura de la clase function Ajax(file, txt) { // 1 objeto por cada id a actualizar this.vSumatorio = new sack(); this.vFactorial = new sack(); this.vFibonacci = new sack(); // 1 función por cada operación diferente this.Sumatorio = function(x) { ... } this.Factorial = function(x) { ... } this.Fibonacci = function(x) { ... } this.Todos = function(x) { ... } } // Ajax Oscar Cubo Medina Programación Web en Servidor AJAX
III Operación múltiple this.Todos = function(x) { this.Sumatorio(x); this.Factorial(x); this.Fibonacci(x); } Crear la clase var ajax = new Ajax(’ajax.php’, ’Calculando...’); Oscar Cubo Medina Programación Web en Servidor AJAX
I Selección de operación switch($_POST[’ajax’]) { case ’sumatorio’: ... case ’factorial’: ... case ’fibonacci’: ... default: // Error "Operación desconocida"; } // switch Oscar Cubo Medina Programación Web en Servidor AJAX
III Fibonacci function fibonacci($x) { if ($x < 2) return 1; return ( fibonacci($x-1) + fibonacci($x-2) ); } $res = fibonacci($_POST[’x’]); Oscar Cubo Medina Programación Web en Servidor AJAX
votación para el premio pulitzer • Dispone de X artículos candidatos • La votación se realiza vía Web • Cada persona puede asignar de 0 a 5 puntos a cada candidato • El candidato con más puntos ganará el premio ;-) • Se necesita actualizar la clasificación en tiempo realTM Oscar Cubo Medina Programación Web en Servidor AJAX
de votación para eurovisión • Disponemos de X canciones candidatas • Cada usuario puede otorgar 5,4,3,2 y 1 votos a 5 candidaturas diferentes • Cuando se acaba la serie de 5 se inicia una nueva votación • Gana el que más votos tenga • La clasificación debe actualizarse en tiempo realTM Oscar Cubo Medina Programación Web en Servidor AJAX
tareas a realizar • Dispone de un listado de tareas ordenado por prioridad. • Cada tarea se compone de un nombre y una descripción • Cada tarea tiene 5 niveles de prioridad • En el listado de tareas se muestra sólo el nombre y, al seleccionar una tarea, se muestran sus detalles • Es posible añadir/borrar tareas Oscar Cubo Medina Programación Web en Servidor AJAX