56
AJAX Ejemplo Prácticas AJAX Asynchronous JavaScript and XML Oscar Cubo Medina <ocubo@fi.upm.es> Programación Web en Servidor INEM 2006/2007 Oscar Cubo Medina Programación Web en Servidor AJAX

AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

Embed Size (px)

Citation preview

Page 1: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

AJAXAsynchronous JavaScript and XML

Oscar Cubo Medina <[email protected]>

Programación Web en Servidor

INEM 2006/2007

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 2: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

Contenidos

1 Tecnología AJAXIntroducciónObjeto XMLHttpRequestSimple AJAX Code-KitLectura adicional

2 Ejemplo prácticoPasosRequisitos

Diseño de la soluciónInterfaz HTMLAJAX clienteAJAX Servidor

3 PrácticasPráctica 1Práctica 2Práctica 3

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 3: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

1 Tecnología AJAXIntroducciónObjeto XMLHttpRequestSimple AJAX Code-KitLectura adicional

2 Ejemplo práctico

3 Prácticas

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 4: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

Introducción

Érase una vez...

• AJAX surge 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

Page 5: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

Introducción

Posibles usos

¿Cuándo se utiliza?Cuando es necesario actualizar una parte de la página sintener 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

Page 6: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

Introducción

Posibles usos

¿Cuándo se utiliza?Cuando es necesario actualizar una parte de la página sintener 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

Page 7: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

Introducción

Posibles usos

¿Cuándo se utiliza?Cuando es necesario actualizar una parte de la página sintener 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

Page 8: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

Introducción

Posibles usos

¿Cuándo se utiliza?Cuando es necesario actualizar una parte de la página sintener 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

Page 9: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

Introducción

Posibles usos

¿Cuándo se utiliza?Cuando es necesario actualizar una parte de la página sintener 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

Page 10: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

Introducción

Posibles usos

¿Cuándo se utiliza?Cuando es necesario actualizar una parte de la página sintener 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

Page 11: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

Introducción

Ventajas e inconvenientes

Ventajas• Mejor 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 funcionalidadesdel navegador

• Historial• Favoritos o bookmarks

• Más peticiones al servidor• Latencia de la red

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 12: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

Introducción

Fundamentos

• Uso combinado de un conjunto de técnicas ya existentes

• (X)HTML• CSS• Javascript

• DHTML• DOM• Objeto XMLHttpRequest

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 13: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

XMLHttpRequest

El objeto XMLHttpRequest

• Permite realizar peticiones Web desde javascript• Incluido originalmente sólo en IE• Actualmente soportado en la API de javascript

Problemas con codificaciónEs necesario especificar la codificación de todas lastransferencias:

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

Page 14: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

XMLHttpRequest

El objeto XMLHttpRequest

• Permite realizar peticiones Web desde javascript• Incluido originalmente sólo en IE• Actualmente soportado en la API de javascript

Problemas con codificaciónEs necesario especificar la codificación de todas lastransferencias:

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

Page 15: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

XMLHttpRequest

Funciones I

Open• Permite abrir un canal de

comunicación con elservidor

open (método,url,[asincrono],[usuario],[clave]

)

Send• Envía datos a través de

una conexión yaestablecida

send (datos)

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 16: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

XMLHttpRequest

Funciones II

Abort• Permite cancelar una

petición en cursoabort ()

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 17: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

XMLHttpRequest

Propiedades I

RespuestaresponseText Texto devuelto por el servidorresponseXML Equivalente a la anterior pero con formato DOM

Control de operaciónstatus 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

Page 18: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

XMLHttpRequest

Propiedades II

Estado de la peticiónreadyState Estado de la petición

onreadystatechange Función que se ejecuta al finalizar unapetició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

Page 19: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

XMLHttpRequest

Funcionamiento

new XmlHttpRequest

0

new XmlHttpRequest

Open0 1

new XmlHttpRequest

Open Send0 1 2

new XmlHttpRequest

Open SendPetición

0 1 2

new XmlHttpRequest

Open SendPetición

Respuesta0 1 2 3

new XmlHttpRequest

Open SendPetición

Respuesta0 1 2 3 4

new XmlHttpRequest

Open Send

onreadystatechange

PeticiónRespuesta0 1 2 3 4

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 20: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

XMLHttpRequest

Funcionamiento

new XmlHttpRequest

0

new XmlHttpRequest

Open0 1

new XmlHttpRequest

Open Send0 1 2

new XmlHttpRequest

Open SendPetición

0 1 2

new XmlHttpRequest

Open SendPetición

Respuesta0 1 2 3

new XmlHttpRequest

Open SendPetición

Respuesta0 1 2 3 4

new XmlHttpRequest

Open Send

onreadystatechange

PeticiónRespuesta0 1 2 3 4

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 21: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

XMLHttpRequest

Funcionamiento

new XmlHttpRequest

0

new XmlHttpRequest

Open0 1

new XmlHttpRequest

Open Send0 1 2

new XmlHttpRequest

Open SendPetición

0 1 2

new XmlHttpRequest

Open SendPetición

Respuesta0 1 2 3

new XmlHttpRequest

Open SendPetición

Respuesta0 1 2 3 4

new XmlHttpRequest

Open Send

onreadystatechange

PeticiónRespuesta0 1 2 3 4

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 22: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

XMLHttpRequest

Funcionamiento

new XmlHttpRequest

0

new XmlHttpRequest

Open0 1

new XmlHttpRequest

Open Send0 1 2

new XmlHttpRequest

Open SendPetición

0 1 2

new XmlHttpRequest

Open SendPetición

Respuesta0 1 2 3

new XmlHttpRequest

Open SendPetición

Respuesta0 1 2 3 4

new XmlHttpRequest

Open Send

onreadystatechange

PeticiónRespuesta0 1 2 3 4

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 23: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

XMLHttpRequest

Funcionamiento

new XmlHttpRequest

0

new XmlHttpRequest

Open0 1

new XmlHttpRequest

Open Send0 1 2

new XmlHttpRequest

Open SendPetición

0 1 2

new XmlHttpRequest

Open SendPetición

Respuesta0 1 2 3

new XmlHttpRequest

Open SendPetición

Respuesta0 1 2 3 4

new XmlHttpRequest

Open Send

onreadystatechange

PeticiónRespuesta0 1 2 3 4

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 24: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

XMLHttpRequest

Funcionamiento

new XmlHttpRequest

0

new XmlHttpRequest

Open0 1

new XmlHttpRequest

Open Send0 1 2

new XmlHttpRequest

Open SendPetición

0 1 2

new XmlHttpRequest

Open SendPetición

Respuesta0 1 2 3

new XmlHttpRequest

Open SendPetición

Respuesta0 1 2 3 4

new XmlHttpRequest

Open Send

onreadystatechange

PeticiónRespuesta0 1 2 3 4

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 25: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

XMLHttpRequest

Funcionamiento

new XmlHttpRequest

0

new XmlHttpRequest

Open0 1

new XmlHttpRequest

Open Send0 1 2

new XmlHttpRequest

Open SendPetición

0 1 2

new XmlHttpRequest

Open SendPetición

Respuesta0 1 2 3

new XmlHttpRequest

Open SendPetición

Respuesta0 1 2 3 4

new XmlHttpRequest

Open Send

onreadystatechange

PeticiónRespuesta0 1 2 3 4

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 26: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

XMLHttpRequest

Funcionamiento

new XmlHttpRequest

0

new XmlHttpRequest

Open0 1

new XmlHttpRequest

Open Send0 1 2

new XmlHttpRequest

Open SendPetición

0 1 2

new XmlHttpRequest

Open SendPetición

Respuesta0 1 2 3

new XmlHttpRequest

Open SendPetición

Respuesta0 1 2 3 4

new XmlHttpRequest

Open Send

onreadystatechange

PeticiónRespuesta0 1 2 3 4

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 27: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

XMLHttpRequest

Esquema de uso I

Creación del objeto

// ¿ Existe en la API ?if (window.XMLHttpRequest) {

// Usar APIhttp = new XMLHttpRequest();

} else {// Usar ActiveX (IE<7)http = new ActiveXObject ("Microsoft.XMLHTTP");

} // if

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 28: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

XMLHttpRequest

Esquema de uso II

Petición de información

// Función de finalizaciónhttp.onreadystatechange = fn;

// Abrir la conexiónhttp.open("GET", "http://url/", true);

// Enviar la peticiónhttp.send(null);

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 29: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

XMLHttpRequest

Esquema de uso III

Callback de recepción

function fn() {// Se comprueba el fin de la cargaif ( 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

Page 30: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

SACK

SACKSimple AJAX Code-Kit

• 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 ofcode to allow you to put AJAX into your webpageswith none of the fuss or overhead of other packages.Just AJAX, just simple.»

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 31: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

SACK

Esquema de uso

Petición AJAX con SACK

document.getElementById(’id’).innerHTML ="Actualizando";

ajax = new sack();ajax.reset();ajax.element = ’id’;ajax.requestFile = ’http://url/fichero’;ajax.method = ’POST’;ajax.setVar(’id’, ’productos’);

ajax.runAJAX(); // Ejecutar la petición

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 32: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

Referencias

AJAX (Asynchronous JavaScript and XML)

Mariano 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

Page 33: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

Referencias

SACK (Simple Ajax Code-Kit)

Gregory Wild-Smith.Twilightuniverse - simple ajax code kit, 2007.URLhttp://www.twilightuniverse.com/resources/code/sack/.

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 34: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

Referencias

Tutoriales

José Manuel Alarcón.Ajax – ¡hagamos un ejemplo!, 2007.URL http://geeks.ms/search/SearchResults.aspx?q=ajax&u=2121&o=DateAscending.

AsH.Ajax tutorials, 2007.URL http://vyk1.spaces.live.com/Blog/cns!EBE3A761F939F926!1051.entry.

Oscar Cubo Medina.Tutorial de ajax, 2007.URL http://laurel.datsi.fi.upm.es/~ocubo/labs/tutoriales/ajax.

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 35: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

1 Tecnología AJAX

2 Ejemplo prácticoPasosRequisitosDiseño de la soluciónInterfaz HTMLAJAX clienteAJAX Servidor

3 Prácticas

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 36: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

Pasos

Pasos a cumplimentar

Diseño1 Definir requisitos2 Estructura de directorios3 Estructura de la interfaz4 Identificar las operaciones AJAX

Ciclo de implementación

1 Crear la estructura de interfaz2 Crear el objeto AJAX (sin operaciones)3 Implementar cada operación por separado4 Pruebas

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 37: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

Pasos

Pasos a cumplimentar

Diseño1 Definir requisitos2 Estructura de directorios3 Estructura de la interfaz4 Identificar las operaciones AJAX

Ciclo de implementación

1 Crear la estructura de interfaz2 Crear el objeto AJAX (sin operaciones)3 Implementar cada operación por separado4 Pruebas

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 38: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

Requisitos

Operaciones matemáticasSumatorio, factorial y fibonacci

• Aplicación que calcule operaciones matemáticas.Sumatorio Suma de los valores de 1 a x∑

x = x + (x − 1) + (x − 2) + · · · + 2 + 1Factorial Producto de los valores de 1 a x

x! = x · (x − 1)! = x · (x − 1) · (x − 2) · . . . · 2 · 1Fibonacci2 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

2http://es.wikipedia.org/wiki/Sucesión_de_Fibonacci

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 39: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

Diseño

Estructura de directorios

• Proyecto

• index.php• ajax.php• lib / includes

• operaciones.php• ...

• scripts• tw-sack.js

• ajax.js• ...

• tpl• style.css• img1.jpg• img2.png• ...

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 40: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

Diseño

Estructura de la interfaz

#sumatorio#factorial#fibonacci

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 41: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

Diseño

Identificar las operaciones AJAX

• 3 controles a actualizar• sumatorio• factorial• fibonacci

• 4 operaciones diferentes• Calcular sumatorio• Calcular factorial• Calcular fibonacci• Calcular todos

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 42: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

HTML (index.php)

Interfaz HTML I

Tipo de documento

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 43: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

HTML (index.php)

Interfaz HTML II

Cabecera del documento

<head><meta http-equiv="Content-Type" content="text/html;

charset=utf-8" /><title>AJAX - Operaciones matemáticas</title><link media="screen" href="css/estilo.css"

type="text/css" rel="stylesheet" /><script type="text/javascript"

language="javascript"src="scripts/tw-sack.js"></script>

<script type="text/javascript"language="javascript"src="scripts/ajax.js"></script>

</head>

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 44: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

HTML (index.php)

Interfaz HTML III

Estructura del documento

<body><div class="pagina">

<div class="cabecera">Cabecera</div><div class="cuerpo">

<div class="izda">Izquierda</div><div class="dcha">Derecha</div>

</div><div class="pie">Pie</div>

</div></body>

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 45: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

HTML (index.php)

Interfaz HTML IV

Esquema de enlace AJAX

<span class="ajax"onclick="ajax.Operacion(1)">Operación(1)</span>

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 46: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

HTML (index.php)

Interfaz HTML V

Generación de enlaces

for($i=0; $i<16;$i++) {echo "<tr>"

."<td><spanonclick=\"ajax.Sum($i)\">sum($i)</span></td>"

."<td><spanonclick=\"ajax.Fac($i)\">fac($i)</span></td>"

."<td><spanonclick=\"ajax.Fib($i)\">fib($i)</span></td>"

."<td><spanonclick=\"ajax.All($i)\">all($i)</span></td>"

."</tr>";} // for

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 47: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

AJAX cliente (ajax.js)

Código AJAX en cliente I

Estructura de la clase

function Ajax(file, txt) {// 1 objeto por cada id a actualizarthis.vSumatorio = new sack();this.vFactorial = new sack();this.vFibonacci = new sack();// 1 función por cada operación diferentethis.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

Page 48: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

AJAX cliente (ajax.js)

Código AJAX en cliente II

Ejemplo de método

this.Sumatorio = function(x) {this.vSumatorio.reset();this.vSumatorio.element = ’sumatorio’;document.getElementById(’id’).innerHTML = txt;this.vSumatorio.requestFile = file;this.vSumatorio.method = ’POST’;this.vSumatorio.setVar(’ajax’, ’sumatorio’);this.vSumatorio.setVar(’x’, x);this.vSumatorio.runAJAX();

}

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 49: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

AJAX cliente (ajax.js)

Código AJAX en cliente 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

Page 50: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

AJAX servidor (ajax.php)

Código AJAX en servidor 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

Page 51: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

AJAX servidor (ajax.php)

Código AJAX en servidor II

Sumatorio / Factorial

function sumatorio($x) {$suma = 0;for($i=1; $i<=$x; $i++) {

$suma += $i;} // for

return $suma;}

$res = sumatorio($_POST[’x’]);

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 52: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

AJAX servidor (ajax.php)

Código AJAX en servidor 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

Page 53: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

1 Tecnología AJAX

2 Ejemplo práctico

3 PrácticasPráctica 1Práctica 2Práctica 3

Oscar Cubo Medina Programación Web en Servidor

AJAX

Page 54: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

Práctica 1

Votación básica

• Sistema de 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 cadacandidato

• 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

Page 55: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

Práctica 2

Votando en Eurovisión

• Sistema de votación para eurovisión• Disponemos de X canciones candidatas

• Cada usuario puede otorgar 5,4,3,2 y 1 votos a 5candidaturas 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

Page 56: AJAX - Asynchronous JavaScript and XMLlaurel.datsi.fi.upm.es/_media/docencia/cursos/pws/ajax.pdf · Simple AJAX Code-Kit Lectura adicional 2 Ejemplo práctico Pasos Requisitos Diseño

AJAX Ejemplo Prácticas

Práctica 3

Lista TO-DO

• Gestor de 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