Sie sind auf Seite 1von 42

XHTML DI NAMI CO AVANZADO XHTML DI NAMI CO AVANZADO

(AJ AX Y DOM) (AJ AX Y DOM)


AJAX
Conceptos y fundamentos bsicos
Patrones de Ajax
Ejemplos prcticos.
Libreras estndares
Bibliografa
Ajax in Practice
Visual Quickstart Guide CSS, DHTML, and Ajax, Fourth Edition
DHTML Utopia. Modern Web Design Using J avaScript & DOM
Ajax: Un Nuevo acercamiento a las Aplicaciones Web
http://www.ajaxhispano.com/ajax-nuevo-acercamiento-aplicaciones-web.html
El objeto XMLHttpRequest
http://www.programacionweb.net/articulos/articulo/?num=386
AJAX (Asynchronous JavaScript And XML)
AJ AX no es una tecnologa. Es realmente muchas tecnologas, cada una
floreciendo por su propio mrito, unindose en poderosas nuevas formas.
AJ AX incorpora:
Presentacin basada en estndares usando XHTML y CSS;
Exhibicin e interaccin dinmicas usando el Document Object Model;
Intercambio y manipulacin de datos usando XML y XSLT;
Recuperacin de datos asincrnica usando XMLHttpRequest;
Y J avaScript poniendo todo junto.
Modelo clsico de aplicaciones Web
Servidor
Bases de datos
Navegador
Interfaz de usuario
Servidor Web
Solicitud
HTTP
Datos
HTML + CSS
Modelo clsico de aplicaciones Web
Servidor
Solicitud
HTTP
Datos
HTML + CSS
Bases
datos
http://cv1.cpd.ua.es/WebCv/CtrlZonaPersonal/LoginCv.asp http://cv1.cpd.ua.es/WebCv/
Modelo AJAX de aplicaciones Web
Servidor
Bases de datos
Navegador
Interfaz de usuario
Servidor Web / XML
Javascript
Datos
HTML + CSS
Motor AJAX
Solicitud
HTTP
Datos
XML
Modelo AJAX de aplicaciones Web
Servidor
Solicitud
HTTP
Datos
XML
Bases
datos
http://maps.google.es/
Dnde utilizar AJAX?
Comunicacin rpida entre usuarios
Interaccin a travs de formularios
Votaciones, encuestas, valoraciones, etc.
Filtrado y manipulacin de datos o resultados de bsqueda
Autocompletado de campos de texto usados comnmente
Dnde no utilizar AJAX?
Envos a travs de formularios simples
Bsquedas
Navegacin bsica
Reemplazar grandes cantidades de texto
Manipulacin de la interfaz
Validacin de usuarios
Dnde vamos a utilizar AJAX?
1. Traer contenido al pulsar determinados enlaces
2. Mini lbum de fotos
3. Desplegables de edificios-localizaciones
4. Buscador sencillo
5. Sugerir valores para un campo
6. Paginar resultados
7. Navegar por directorios (DHTML)
8. Editar campos no editables y actualizar contenido (DHTML)
Ejemplo modelo clsico de aplicaciones Web
Formulario de identificacin
http://127.0.0.1/ajax/mod_clas_form1.html
Validacin simple de datos
http://127.0.0.1/ajax/mod_clas_valid1.asp
Ejemplo modelo clsico de aplicaciones Web
Formulario de identificacin
http://127.0.0.1/ajax/mod_clas_form2.html
El objeto XMLHttpRequest
El objeto XMLHttpRequest nos permite la transferencia de datos en
formato XML desde los script del navegador ( J avaScript, J Scrip, VBScript,
etc.) a los del servidor (PHP, ASP, etc.) e inversamente.
El objeto XMLHttpRequest
El primer en implementar esta API fue Microsoft con un objeto ActiveX
para su navegador Internet Explorer 5, posteriormente empez a
incorporarse de forma nativa en todos los navegadores empezando por
Firefox seguido de Apple, Konqueror, Opera Software, iCab y Microsoft
Internet Explorer 7.
El objeto se declara de forma diferente dependiendo del navegador, pero
sus funciones son las mismas.
El objeto XMLHttpRequest
Permite que la interaccin del usuario con la aplicacin suceda
asincrnicamente (independientemente de la comunicacin con el
servidor). As el usuario nunca estar mirando una ventana en blanco del
navegador y un icono de reloj de arena esperando a que el servidor haga
algo.
Creacin del objeto XMLHttpRequest
En los navegadores basados en Mozilla, la referencia a este objeto con
cdigo J avascript es window.XMLHttpRequest.
En cambio, en Internet Explorer tenemos que hacer uso de
ActiveXObject, existiendo varias versiones denominadas
Microsoft.XMLHTTP y Msxml2.XMLHTTP
As que crearemos una funcin que compruebe mediante un If
condicional si existe el primer objeto, y en caso de que sea
verdadero, crearemos un nuevo objeto XMLHttpRequest, pero si es
falso, crearemos un ActiveXObject Microsoft.XMLHTTP, pero si aun
as no existe, por ltimo crearemos un Msxml2.XMLHTTP.
Creacin del objeto XMLHttpRequest (Modo 1)
var objeto = false;
if (window.XMLHttpRequest)
{
// Si es Mozilla, Safari etc
objeto = newXMLHttpRequest ();
} else if (window.ActiveXObject)
{
// pero si es IE
try
{
objeto = newActiveXObject ("Msxml2.XMLHTTP");
}
catch (e)
{
// en caso que sea una versin antigua
try
{
objeto = newActiveXObject ("Microsoft.XMLHTTP");
}
catch (e)
{
}
}
}
Creacin del objeto XMLHttpRequest (Modo 2)
var objeto = false;
try {
objeto = newActiveXObject("Msxml2.XMLHTTP");
} catch (e1) {
try {
objeto = newActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
objeto = null;
}
}
if (! objeto ) {
if (typeof XMLHttpRequest != "undefined") {
objeto = newXMLHttpRequest();
}
}
Uso del objeto XMLHttpRequest
Cuando ya tenemos el objeto creado, disponemos de diversos mtodos y
propiedades para comprobar el estado de los datos.
Mtodos
abort()
getAllResponseHeaders()
getresponseHeader(string header)
open(string url,string asynch)
send(string)
setRequestHeader(string header,
string value)
Propiedades:
onreadystatechange
readyState
responseText
responseXML
status
statusText
onreadystatechange (atributo)
El atributo onreadystatechange asigna la funcin que se ejecutar cada
vez que readyState cambie de valor.
Utilizacin
oXMLHttpRequest.onreadystatechange = fFuncion;
oXMLHttpRequest - Objeto XMLHttpRequest
fFuncion - Funcin a ejecutar
Frecuentemente utilizamos onreadystatechange para definir una
funcin para leer los datos recibidos del servidor, en este caso en su
interior comprobaramos que readyState tenga valor 4 y entonces
leeremos el valor de responseXML, responseText...
onreadystatechange (atributo)
<script language="J avaScript" type="text/javascript">
/*<![CDATA[*/
// Creamos la funcin
function fFuncion () {
// Alertamos el estado de la peticin
alert ( oXMLHttpRequest.readyState );
}
// Definimos la funcin handler del evento
oXMLHttpRequest.onreadystatechange =fFuncion;
/*]]>*/
</script>
readyState (atributo)
El atributo readyState devuelve el estado actual del objeto
XMLHttpRequest, cada vez que cambia el valor de readyState se lanza la
funcin indicada en onreadystatechange
Utilizacin
iEstado = oXMLHttpRequest.readyState;
iEstado - Estado actual del objeto
0 - Sin inicializar, siempre ser:
1 - Abierto (acaba de llamar open)
2 Enviado
3 Recibiendo
4 - A punto
La propiedad readyState se utiliza en todas las comunicaciones
asncronas para comprobar que podemos acceder ya a atributos como
responseXML y responseText, slo accesibles en los estados 3 y 4.
readyState (atributo)
<script language="J avaScript" type="text/javascript">
/*<![CDATA[*/
// Creamos la funcin
function fFuncion () {
// Si el estado es a punto
if ( oXMLHttpRequest.readyState ==4) {
// Mostramos el texto que llega
alert ( oXMLHttpRequest.responseText );
}
}
// Definimos la funcin handler del evento
oXMLHttpRequest.onreadystatechange =fFuncion;
/*]]>*/
</script>
responseText (atributo)
El atributo responseText devuelve el texto del documento descargado
del servidor en una peticin con XMLHttpRequest.
Utilizacin
sDocumento = oXMLHttpRequest.responseText;
sDocumento - Cadena de caracteres con el texto del documento.
La propiedad responseText se utiliza para tratar los datos recibidos
desde el servidor que no tienen formato XML, podremos acceder a los
datos siempre y cuando el estado de la conexin devuelto con
readyStatechange sea igual a 3 (recibiendo) o 4 (a punto).
Siempre que podamos intentaremos usar responseXML en lugar de
responseText y XML para la los datos en lugar de texto plano.
responseText (atributo)
<script language="J avaScript" type="text/javascript">
/*<![CDATA[*/
// Creamos la funcin
function fFuncion () {
// Si el estado es a punto
if ( oXMLHttpRequest.readyState ==4) {
// Mostramos el texto que llega
alert ( oXMLHttpRequest.responseText );
}
}
// Definimos la funcin handler del evento
oXMLHttpRequest.onreadystatechange =fFuncion;
/*]]>*/
</script>
open (mtodo)
El mtodo open prepara una conexin HTTP a travs del objeto XMLHttpRequest
( con un mtodo y una URL especificados ) y inicializa todos los atributos del objeto.
Utilizacin
oXMLHttpRequest.open ( sMetodo, sURL [, bSincronia [, sUsuario [, sPwd ] ] ] );
sMetodo - String con el mtodo de conexin ( GET o POST ).
sURL - URL para la peticion HTTP
bSincronia - Booleano opcional en true para usar modo asncrono y en false para
sncrono.
sUsuario - Cadena de caracteres opcional con el nombre de usuario para la
autenticacin
sPwd - Cadena de caracteres opcional con la contrasea del usuario sUsuariopara la
autenticacin
Al llamar a open el atributo readyState a 1, resetea las cabeceras (headers) de
envo y los devuelve atributos responseText, responseXML, status y
statusText a sus valores
open (mtodo)
No se permiten las llamadas a dominios, puertos o protocolos
diferentes al de la pgina que llama la funcin
Para realizar la conexin deberemos usar send despus de open
open (mtodo)
<script language="J avaScript" type="text/javascript">
/*<![CDATA[*/
// creamos el objeto
oXMLHttp = newcXMLHttpRequest();
// pedimos la pgina en modo sncrono
oXMLHttp.open('get', 'index.htm', false);
// enviamos los datos
oXMLHttp.send();
/*]]>*/
</script>
send (mtodo)
El mtodo send enva la peticin con los datos pasados por parmetro
como cuerpo de la peticin a travs del objeto XMLHttpRequest.
Utilizacin
oXMLHttpRequest.send ( mData );
oData - Cuerpo de la peticin HTTP.
El parametro oData puede ser una referencia al DOM de un documento o
una cadena de caracteres.
send (mtodo)
<script language="J avaScript" type="text/javascript">
/*<![CDATA[*/
// creamos el objeto
oXMLHttp = newcXMLHttpRequest();
// pedimos la pgina en modo sncrono
oXMLHttp.open('get', 'index.htm', false);
// enviamos los datos
oXMLHttp.send();
/*]]>*/
</script>
1 Ejemplo. Seleccin de contenido
Vamos a crear una pgina con 3 enlaces que al pulsar sobre cada uno de
ellos nos descargue el contendido de 3 pginas doc1.html, doc2.html y
doc3.html que se encuentran ubicados en la carpeta docs.
Por ltimo los mostramos con un alert.
Los pasos a seguir seran los siguientes:
1. Crear el objeto
2. Establecer la comunicacin con el servidor usando AJAX
3. Hacer la peticin
4. El servidor nos preparar y devolver una informacin
5. Si todo es correcto mostrar la informacin devuelve
* Primer contacto con AJAX
* Analizar los resultados con FireDebug
http://127.0.0.1/ajax/ej1/index.html
Paso de parmetros (GET)
En la peticin AJ AX podemos pasar parmetros tanto por POST como por
GET a nuestro servidor.
Para pasar parmetros por GET ( por URL ) , usaremos una URL con
parmetros en la funcin open independientemente de usar el mtodo
GET o POST, por ejemplo:
oXMLHttp.open('GET', 'pagina.php?parametro=' +escape(parametro));
setRequestHeader (mtodo)
El mtodo setRequestHeader aade un encabezado HTTP a la peticin
HTTP a travs del objeto XMLHttpRequest.
Utilizacin
oXMLHttpRequest.setRequestHeader ( sNombre, sValor);
sNombre - Nombre del encabezado HTTP.
sValor - Valor del encabezado HTTP.
El parametro sNombre no podr ser Accept-Charset, Accept-Encoding,
Content-Length, Expect, Date, Host, Keep-Alive, Referer, TE, Trailer,
Transfer-Encoding ni Upgrade, tampoco podr contener espacios, puntos o
saltos de lnea.
El parametro sValor no podr contener saltos de lnea.
Solo podemos utilizar setRequestHeader cuando el valor de
readyState sea 1.
Paso de parmetros (POST)
Para pasarlos por POST, deberemos usar el mtodo POST en la funcin
open, configurar el tipo de informacin que enviamos y por ltimo
pasamos los parmetros desde la funcin send, veamos un ejemplo:
oXMLHttp.open('POST','pagina.php');
try {
oXMLHttp.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded")
} catch (e) { }
oXMLHttp.send( 'parametro=' +escape(parametro));
2 Ejemplo. Paso de parmetros
Vamos a pasar 3 parmetros a un ASP que simplemente devuelve las
variables que han llegado por mtodo GET o POST
Los parmetros son nombre=HTML dinmico avanzado (Ajax y DOM),
fechainicio="16/10/2007 y fechafin="24/10/2007"
Los pasos a seguir seran los siguientes:
1. Crear el objeto
2. Establecer la comunicacin con el servidor usando AJAX.
1. Si es con el mtodo GET adjuntar los parmetros a la direccin
3. Hacer la peticin
1. Si es el mtodo POST, especifica qu tipo de datos llegarn al
servidor
4. El servidor nos preparar y devolver una informacin
5. Si todo es correcto mostrar la informacin devuelve
* Traspaso de datos http://127.0.0.1/ajax/ej2/index.html
status (atributo)
El atributo statusText devuelve el cdigo del estado HTTP de la
transmisin devuelto por el servidor web.
Utilizacin
iEstado = oXMLHttpRequest.status;
iEstado - Entero con el cdigo HTTP de estado.
La propiedad status e utiliza para comprobar que no ha habido problemas
en la comunicacin con el servidor, podremos acceder a los datos siempre
y cuando el estado de la conexin devuelto con readyStatechange sea
igual a 3 (recibiendo) o 4 (a punto).
El cdigo de estado HTTP para una transmisin correcta es el 200, ser
conveniente comprobar este dato antes de acceder a los datos con
responseXML o responseText.
status (atributo)
100 Continua
101 Cambio de protocolo
200 OK
201 Creado
202 Aceptado
203 Informacin no oficial
204 Sin Contenido
205 Contenido para reset
206 Contenido parcial
300 Mlpiples posibilidades
301 Mudado permanentemente
302 Encontrado
303 Vea otros
304 No modificado
305 Utilice un proxy
307 Redireccin temporal
400 Solicitud incorrecta
401 No autorizado
402 Pago requerido
403 Prohibido
404 No encontrado
405 Mtodo no permitido
406 No aceptable
407 Proxy requerido
408 Tiempo de espera agotado
409 Conflicto
410 No mapas disponible
411 Requiere longitud
412 Fall precondicin
413 Entidad de solicitud demasiado larga
414 URI de solicitud demasiado largo
415 Tipo de medio no soportado
416 Rango solicitado no disponible
417 Fall expectativa
500 Error interno
501 No implementado
502 Pasarela incorrecta
503 Servicio no disponible
504 Tiempo de espera de la pasarela agotado
505 Versin de HTTP no soportada
3 Ejemplo. Llamar a una pgina que no existe
Vamos a llamar a una pgina noexiste.asp y vamos a ver que nos enva el
objeto. Qu ocurrir si llamamos a oXMLHttp.responseText ?
Los pasos a seguir seran los siguientes:
1. Crear el objeto
2. Establecer la comunicacin con el servidor usando AJAX.
3. Hacer la peticin
4. El servidor nos preparar y devolver una informacin
1. Si el cdigo es 404 mostrar un mensaje de que no existe la
pgina
2. Si el cdigo es de error (<>200) entonces mostramos el cdigo
3. Si todo es correcto entonces mostrar la respuesta
* Control de errores
http://127.0.0.1/ajax/ej3/index.html
4 Ejemplo. Devolver datos de Access
Disponemos de una base de datos Access, usuarios.mdb, que contiene
una tabla Alumnos.
Crear una pgina HTML con un enlace y un textarea, que al pulsar haga
una llamada a un ASP que consulte todos los alumnos, devuelva los datos
y los inserte en el campo textarea el listado de todos los alumnos.
* Consulta en una base de datos
* Traspaso de diferentes campos en una llamada
http://127.0.0.1/ajax/ej4/index.html
5 Ejemplo. Servicios y acciones
Disponemos de una base de datos Access, edificios.mdb, que contiene dos
tablas Edificio y Unidad.
Crear una pgina HTML con dos desplegables, uno para los edificios y otro
para las unidades de ese edificio. Al pulsar un edificio, se hace una
llamada que consulta en un APS
* Concepto de Servicios
* Devolver cdigo J avascript
* Uso de tipos de eventos
http://127.0.0.1/ajax/ej5/index.html
6 Ejemplo. Mejorando el ejemplo anterior
El objetivo del ejercicio es mejorar el 5 ejercicio.
1. Consulta de los edificios desde la base de datos
1. Conversin del fichero de HTML a ASP
2. Organizar cdigo
1. Clase cXMLHttpRequest.js
2. acciones.js
3. Gestin en array de todos los objetos cXMLHttpRequest
4. Pasar un parmetro a la funcin que gestiona lo que llega de la
peticin AJ AX
5. Liberar todos los objetos
* Concepto de bloqueos
* Reutilizacin de cdigo
http://127.0.0.1/ajax/ej6/index.asp

Das könnte Ihnen auch gefallen