SlideShare une entreprise Scribd logo
1  sur  62
PARTE IINTRODUCCION A AJAX
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 1
 El término AJAX es un acrónimo de Asynchronous JavaScript +
XML, que se puede traducir como "JavaScript asíncrono +
XML".
 El término AJAX se presentó por primera vez en el artículo
"Ajax: A New Approach to Web Applications publicado por
Jesse James Garrett* el 18 de Febrero de 2005.
 El artículo define AJAX de la siguiente forma:
“ Ajax no es una tecnología en sí misma. Se trata de varias
tecnologías independientes que se unen de formas nuevas y
sorprendentes.”
 *Curiosidad: También trabajó en Mozilla
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia
HISTORIA
2
Las tecnologías que forman AJAX son:
 XHTML y CSS, para crear una presentación basada en
estándares.
 DOM, para la interacción y manipulación dinámica de la
presentación.
 XML, XSLT y JSON, para el intercambio y la manipulación de
información.
 XMLHttpRequest, para el intercambio asíncrono de
información.
 JavaScript, para unir todas las demás tecnologías.
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia
TECNOLOGÍAS
3
 La técnica tradicional para crear aplicaciones web
funciona correctamente, pero no crea una buena
sensación al usuario. Al realizar peticiones continuas
al servidor, el usuario debe esperar a que se
recargue la página con los cambios solicitados.
 AJAX permite mejorar completamente la interacción
del usuario con la aplicación, evitando las recargas
constantes de la página, ya que el intercambio de
información con el servidor se produce en un
segundo plano.
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia
JAVASCRIPT ASÍNCRONO
4
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia
MODELO TRADICIONAL DE APLICACIÓN
WEB
NAVEGADOR -
CLIENTE
SISTEMAS – SERVER
INTERFASE
DE
USUARIO
SERVIDOR WEB
BASE DE DATOS
SOLICITUD HTTP
DATOS HTML + CSS
TRANSPORTE
HTTP (S)
5
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia
MODELO AJAX DE APLICACIÓN WEB
NAVEGADOR – CLIEN TE
SISTEMAS – SERVER
INTERFASE DE
USUARIO
SERVIDOR WEB
BASE DE DATOS
SOLICITUD HTTP
DATOS XML
TRANSPORTE
HTTP (S)
MOTOR AJAX
DATOS
HTML + CSS
LLAMADA
JAVASCRIPT
6
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia
MODELO CLÁSICO DE APLICACIONES
WEB (SÍNCRONO)
CLIENTE
SERVIDOR
TIEMPO
ACTIVIDAD DEL
USUARIO
ACTIVIDAD DEL
USUARIO
ACTIVIDAD DEL
USUARIO
PROCESO
DEL SISTEMA
PROCESO DEL
SISTEMA
TRANS
MISION
DE
DATOS
TRANS
MISION
DE
DATOS
TRANS
MISION
DE
DATOS
TRANS
MISION
DE
DATOS
7
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia
MODELO AJAX DE APLICACIONES WEB
(ASÍNCRONO)
CLIENTE
SERVIDOR
TIEMPO
ACTIVIDAD DEL USUARIO
PROCESO
DEL SISTEMA
PROCESO DEL
SISTEMA
TRANS
MISION
DE
DATOS
TRANS
MISION
DE
DATOS
TRANS
MISION
DE
DATOS
TRANS
MISION
DE
DATOS
PROCESO DEL
SISTEMA
TRANS
MISION
DE
DATOS
TRANS
MISION
DE
DATOS
TRATAMIENTO LADO CLIENTE
INTERFASE DE USUARIO
MOTOR AJAX
I O I O I O I O I O
8
 Las peticiones HTTP al servidor se sustituyen por
peticiones JavaScript que se realizan al elemento
encargado de AJAX.
 Las peticiones más simples no requieren
intervención del servidor, por lo que la respuesta es
inmediata.
 Si la interacción requiere una respuesta del servidor,
la petición se realiza de forma asíncrona mediante
AJAX.
 En este caso, la interacción del usuario tampoco se
ve interrumpida por recargas de página o largas
esperas por la respuesta del servidor.
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia
APLICACIONES ASÍNCRONAS
9
GMAIL
OUTLOOK
GOOGLE MAPS
GOOGLE DOCS
MEEBO
FLICKR
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia
ALGUNAS APLCACIONES CONOCIDAS
BASADAS EN AJAX
10
Los objetos se emplean en JavaScript para
organizar el código fuente de una forma más
clara y para encapsular métodos y funciones
comunes.
La forma más sencilla de crear un objeto es
mediante la palabra reservada new seguida
del nombre de la clase que se quiere
instanciar:
var elObjeto = new Object();
var laCadena = new String();
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia
OBJETOS
11
 Un objeto de JavaScript es un array asociativo formado por las
propiedades y los métodos del objeto.
 Un array asociativo es aquel en el que cada elemento no está
asociado a su posición numérica dentro del array, sino que
está asociado a otro valor específico.
 La forma tradicional de definir los arrays asociativos es
mediante la clase Array:
var elArray = new Array();
elArray['primero'] = 1;
elArray['segundo'] = 2;
alert(elArray['primero']);
alert(elArray[0]);
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia
OBJETOS
EJEMPLO
12
 Como los objetos son en realidad arrays asociativos
que almacenan sus propiedades y métodos, la forma
más directa para definir esas propiedades y métodos
es la notación de puntos:
 elObjeto.id = "10";
 elObjeto.nombre = "Objeto de prueba";
 Al contrario de lo que sucede en otros lenguajes
orientados a objetos, como por ejemplo Java, para
asignar el valor de una propiedad no es necesario
que la clase tenga definida previamente esa
propiedad.
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia
PROPIEDADES
13
 Los métodos se definen asignando funciones al objeto. Si
la función no está definida previamente, es posible crear
una función anónima para asignarla al nuevo método del
objeto.
 Uno de los aspectos más importantes del ejemplo
anterior es el uso de la palabra reservada this.
 La palabra this se suele utilizar habitualmente dentro de
los métodos de un objeto y siempre hace referencia al
objeto que está llamado a ese método.
elObjeto.muestraId = function() {
alert("El ID del objeto es " + this.id);
}
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia
MÉTODOS
EJEMPLO
14
 Además de las funciones anónimas, también es posible
asignar a los métodos de un objeto funciones definidas con
anterioridad:
function obtieneId() {
return this.id;
}
elObjeto.obtieneId = obtieneId;
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia
MÉTODOS
15
 Para asignar una función externa al método de un objeto, sólo
se debe indicar el nombre de la función externa sin
paréntesis.
 Si se utilizaran los paréntesis el objeto no tendría un método
llamado obtieneId, sino una propiedad con ese nombre y con
un valor igual al resultado devuelto por la función externa.
function obtieneId() {
return this.id;
}
elObjeto.obtieneId = obtieneId();
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia
MÉTODOS
EJEMPLO
16
 Es posible crear objetos complejos que contengan otros
objetos:
var Aplicacion = new Object();
Aplicacion.Modulos = new Array();
Aplicacion.Modulos[0] = new Object();
Aplicacion.Modulos[0].titulo = "Lector RSS";
var inicial = new Object();
inicial.estado = 1;
inicial.publico = 0;
inicial.nombre = "Modulo_RSS";
inicial.datos = new Object();
Aplicacion.Modulos[0].objetoInicial = inicial;
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia
MÉTODOS
EJEMPLO
17
 En el ejemplo anterior, se define un objeto principal
llamado Aplicacion que a su vez contiene varios
objetos.
 La propiedad Modulos de la aplicación es un array en
el que cada elemento es un objeto que representa a
un módulo.
 A su vez, cada objeto Modulo tiene una propiedad
llamada titulo y otra llamada objetoInicial que
también es un objeto con las propiedades y valores
iniciales del módulo.
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia
MÉTODOS
18
 JavaScript define un par de métodos denominados apply() y
call() que son muy útiles para las funciones.
 Ambos métodos permiten ejecutar una función como si fuera
un método de otro objeto.
 La única diferencia entre los dos métodos es la forma en la
que se pasan los argumentos a la función.
function miFuncion(x) {
return this.numero + x;
}
var elObjeto = new Object();
elObjeto.numero = 5;
var resultado = miFuncion.call(elObjeto, 4);
alert(resultado);
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia
MÉTODOS APPLY() Y CALL()
19
 El método apply() es idéntico al método call(), salvo que en
este caso los parámetros se pasan como un array:
function miFuncion(x) {
return this.numero + x;
}
var elObjeto = new Object();
elObjeto.numero = 5;
var resultado = miFuncion.apply(elObjeto, [4]);
alert(resultado);
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 20
MÉTODOS APPLY() Y CALL()
EJEMPLO
 La notación JSON (JavaScript Object Notation) es un formato
sencillo para el intercambio de información. El formato JSON
permite representar estructuras de datos (arrays) y objetos
(arrays asociativos) en forma de texto.
 La notación de objetos mediante JSON es una de las
características principales de JavaScript y es un mecanismo
definido en los fundamentos básicos del lenguaje.
 En los últimos años, JSON se ha convertido en una alternativa
al formato XML, ya que es más fácil de leer y escribir, además
de ser mucho más conciso.
 No obstante, XML es superior técnicamente porque es un
lenguaje de marcado, mientras que JSON es simplemente un
formato para intercambiar datos.
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 21
JSON
 Como ya se sabe, la notación tradicional de los arrays es tediosa
cuando existen muchos elementos:
var modulos = new Array();
modulos[0] = "Lector RSS";
modulos[1] = "Gestor email";
modulos[2] = "Agenda";
modulos[3] = "Buscador";
modulos[4] = "Enlaces";
 Para crear un array normal mediante JSON, se indican sus
valores separados por comas y encerrados entre corchetes. Por
lo tanto, el ejemplo anterior se puede reescribir de la siguiente
manera utilizando la notación JSON:
var modulos = ["Lector RSS", "Gestor email",
"Agenda", "Buscador", "Enlaces"];
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 22
JSON – ARRAYS NORMALES
var modulos = new Array();
modulos.titulos = new Array();
modulos.titulos['rss'] = "Lector RSS";
modulos.titulos['email'] = "Gestor de email";
modulos.titulos['agenda'] = "Agenda";
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 23
JSON – ARRAYS ASOCIATIVOS
var modulos = new Array();
modulos.titulos = new Array();
modulos.titulos.rss = "Lector RSS";
modulos.titulos.email = "Gestor de email";
modulos.titulos.agenda = "Agenda";
var modulos = new Array();
modulos.titulos = {rss: "Lector RSS", email: "Gestor de email", agenda: "Agenda"};
NOTACIÓN
TRADICIONAL
NOTACIÓN DE
PUNTOS
NOTACIÓN JSON
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 24
JSON – OBJETOS COMPLEJOS
var modulo = new Object();
modulo.titulo = "Lector RSS";
modulo.objetoInicial = new Object();
modulo.objetoInicial.estado = 1;
modulo.objetoInicial.publico = 0;
modulo.objetoInicial.nombre = "Modulo_RSS";
modulo.objetoInicial.datos = new Object();
var modulo = {
titulo : "Lector RSS",
objetoInicial : { estado : 1, publico : 0, nombre : "Modulo RSS", datos : {} }
};
NOTACIÓN DE
PUNTOS
NOTACIÓN JSON
 La forma habitual de trabajo consiste en definir clases a
partir de las cuales se crean los objetos con los que trabajan
las aplicaciones.
 Sin embargo, JavaScript no permite crear clases similares a
las de lenguajes como Java o C++.
 De hecho, la palabra class sólo está reservada para su uso en
futuras versiones de JavaScript.
 A pesar de estas limitaciones, es posible utilizar en JavaScript
unos elementos parecidos a las clases y que se denominan
pseudoclases. Los conceptos que se utilizan para simular las
clases son las funciones constructoras y el prototype de los
objetos.
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 25
CLASES
 JavaScript utiliza funciones para simular los constructores de
objetos, por lo que estas funciones se denominan "funciones
constructoras".
 El siguiente ejemplo crea una función llamada Factura que se
utiliza para crear objetos que representan una factura.
function Factura(idFactura, idCliente) {
this.idFactura = idFactura;
this.idCliente = idCliente;
}
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 26
FUNCIONES CONSTRUCTORAS
 Después de definir la función anterior, es posible crear un
objeto de tipo Factura y simular el funcionamiento de un
constructor:
var laFactura = new Factura(3, 7);
 Así, el objeto laFactura es de tipo Factura, con todas sus
propiedades y métodos y se puede acceder a ellos utilizando
la notación de puntos habitual:
alert("cliente = " + laFactura.idCliente + ",
factura = " + laFactura.idFactura);
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 27
FUNCIONES CONSTRUCTORAS
EJEMPLO
 Las funciones constructoras no solamente pueden establecer las
propiedades del objeto, sino que también pueden definir sus
métodos. Siguiendo con el ejemplo anterior, se puede crear un
objeto completo llamado Factura con sus propiedades y métodos:
function Factura(idFactura, idCliente) {
this.idFactura = idFactura;
this.idCliente = idCliente;
this.muestraCliente = function() {
alert(this.idCliente);
}
this.muestraId = function() {
alert(this.idFactura);
}
}
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 28
PROTOTYPE
 Una vez definida la pseudoclase mediante la función
constructora, ya es posible crear objetos de ese tipo. En el
siguiente ejemplo se crean dos objetos diferentes y se
emplean sus métodos:
var laFactura = new Factura(3, 7);
laFactura.muestraCliente();
var otraFactura = new Factura(5, 4);
otraFactura.muestraId();
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 29
PROTOTYPE
EJEMPLO
Incluir los métodos de los objetos como
funciones dentro de la propia función
constructora, tiene un gran inconveniente que la
hace poco aconsejable.
En el ejemplo anterior, las funciones
muestraCliente() y muestraId() se crean de nuevo
por cada objeto creado.
En efecto, con esta técnica, cada vez que se
instancia un objeto, se definen tantas nuevas
funciones como métodos incluya la función
constructora. Esto afecta al rendimiento!
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 30
PROTOTYPE
 Afortunadamente, JavaScript incluye una propiedad que no
está presente en otros lenguajes de programación y que
soluciona este inconveniente. La propiedad se conoce con el
nombre de prototype y es una de las características más
poderosas de JavaScript.
 Todos los objetos de JavaScript incluyen una referencia
interna a otro objeto llamado prototype o "prototipo".
 Cualquier propiedad o método que contenga el objeto
prototipo, está presente de forma automática en el objeto
original.
 En cierto modo, se puede decir que el prototype es el molde
con el que se fabrica cada objeto de ese tipo.
 Si se modifica el molde o se le añaden nuevas características,
todos los objetos fabricados con ese molde tendrán esas
características.26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 31
PROTOTYPE
 Normalmente los métodos no varían de un objeto a otro del
mismo tipo, por lo que se puede evitar el problema de
rendimiento comentado anteriormente añadiendo los métodos
al prototipo a partir del cual se crean los objetos.
function Factura(idFactura, idCliente) {
this.idFactura = idFactura;
this.idCliente = idCliente;
}
Factura.prototype.muestraCliente = function() {
alert(this.idCliente);
}
Factura.prototype.muestraId = function() {
alert(this.idFactura);
}
 No se crean dos nuevas funciones por cada objeto, sino que se
definen únicamente dos funciones para todos los objetos creados.
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 32
PROTOTYPE
EJEMPLO
Los lenguajes orientados a objetos disponen,
entre otros, de los conceptos de herencia entre
clases y de ámbito (scope) de sus métodos y
propiedades (public, private, protected).
Sin embargo, JavaScript no dispone de forma
nativa ni de herencia ni de ámbitos.
Si se requieren ambos mecanismos, la única
opción es simular su funcionamiento mediante
clases, funciones y métodos desarrollados a
medida.
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 33
HERENCIA
 Algunas técnicas simulan el uso de propiedades privadas
prefijando su nombre con un guión bajo, para distinguirlas del
resto de propiedades públicas.
 Para simular la herencia de clases, algunas librerías como
Prototype añaden un método a la clase Object llamado
extend() y que copia las propiedades de una clase origen en
otra clase destino:
Object.extend = function(destination, source) {
for (var property in source) {
destination[property] = source[property];
}
return destination;
}
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 34
HERENCIA
 Las versiones 3.0 de los navegadores Internet Explorer y
Netscape Navigator introdujeron el concepto de Browser
Object Model o BOM, que permite acceder y modificar las
propiedades de las ventanas del propio navegador.
 Mediante BOM, es posible redimensionar y mover la ventana
del navegador, modificar el texto que se muestra en la barra
de estado y realizar muchas otras manipulaciones no
relacionadas con el contenido de la página HTML.
 El mayor inconveniente de BOM es que, al contrario de lo que
sucede con DOM, ninguna entidad se encarga de
estandarizarlo o definir unos mínimos de interoperabilidad
entre navegadores.
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 35
BOM (BROWSER OBJECT MODEL)
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 36
BOM (BROWSER OBJECT MODEL)
 El BOM está compuesto por varios objetos relacionados entre
sí. El siguiente esquema muestra los objetos de BOM y su
relación:
El objeto window representa la ventana
completa del navegador.
BOM define cuatro métodos para manipular el
tamaño y la posición de la ventana:
▪ moveBy(x, y)
▪ moveTo(x, y)
▪ resizeBy(x, y)
▪ resizeTo(x, y)
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 37
EL OBJETO WINDOW
 A continuación se muestran algunos ejemplos de uso de
estas funciones:
// Mover la ventana 20 píxel hacia la derecha y
30 píxel hacia abajo
window.moveBy(20, 30);
// Redimensionar la ventana hasta un tamaño de
250 x 250
window.resizeTo(250, 250);
// Agrandar la altura de la ventana en 50 píxel
window.resizeBy(0, 50);
// Colocar la ventana en la esquina izquierda
superior de la ventana
window.moveTo(0, 0);
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 38
EL OBJETO WINDOW
 function muestraMensaje() {
 alert("Este mensaje se muestra cada segundo");
 }
 setInterval(muestraMensaje, 1000);
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 39
SET TIME OUT – SET INTERVAL
function muestraMensaje() {
alert("Han transcurrido 3 segundos desde que me
programaron");
}
var id = setTimeout(muestraMensaje, 3000);
 El objeto document es el único que pertenece tanto al DOM
como al BOM.
 Desde el punto de vista del BOM, el objeto document
proporciona información sobre la propia página HTML.
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 40
EL OBJETO DOCUMENT
 El objeto location es uno de los objetos más útiles del BOM.
Debido a la falta de estandarización, location es una
propiedad tanto del objeto window como del objeto document.
 El objeto location representa la URL de la página HTML que se
muestra en la ventana del navegador y proporciona varias
propiedades útiles para el manejo de la URL:
Hash, host, hostname, href, pathname,
port, protocol, search
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 41
EL OBJETO LOCATION
 El objeto navigator es uno de los primeros objetos que incluyó
el BOM y permite obtener información sobre el propio
navegador.
 En Internet Explorer, el objeto navigator también se puede
acceder a través del objeto clientInformation.
 Aunque es uno de los objetos menos estandarizados, algunas
de sus propiedades son comunes en casi todos los
navegadores.
 A continuación se muestran algunas de esas propiedades:
 appCodename, appName, appMinorVersion,
appVersion, browserLanguaje, cookieEnabled,
cpuClass, javaEnabled, languaje, mimeTypes, onLine,
osCpu, plattform, plugins, etc.
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 42
EL OBJETO NAVIGATOR
 El objeto screen se utiliza para obtener información sobre la
pantalla del usuario.
 Uno de los datos más importantes que proporciona el objeto
screen es la resolución del monitor en el que se están
visualizando las páginas.
 Los diseñadores de páginas web necesitan conocer las
resoluciones más utilizadas por los usuarios para adaptar sus
diseños a esas resoluciones.
 Las siguientes propiedades están disponibles en el objeto
screen:
availHeight, availWidth, colorDepth, height,
width
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 43
EL OBJETO SCREEN
 Todo comenzó en 1998, cuando Alex Hopmann y su equipo se
encontraban desarrollando la entonces futura versión de
Exchange 2000. El punto débil del servidor de correo
electrónico era su cliente vía web, llamado OWA (Outlook Web
Access).
 Durante el desarrollo de OWA, se evaluaron dos opciones: un
cliente formado sólo por páginas HTML estáticas que se
recargaban constantemente y un cliente realizado
completamente con HTML dinámico o DHTML.
 Alex Hopmann pudo ver las dos opciones y se decantó por la
basada en DHTML. Sin embargo, para ser realmente útil a
esta última le faltaba un componente esencial: "algo" que
evitara tener que enviar continuamente los formularios con
datos al servidor.
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 44
EL OBJETO XMLHTTPREQUEST
 Motivado por las posibilidades futuras de OWA, Alex creó en
un solo fin de semana la primera versión de lo que denominó
XMLHTTP.
 La primera demostración de las posibilidades de la nueva
tecnología fue un éxito, pero faltaba lo más difícil: incluir esa
tecnología en el navegador Internet Explorer.
 Si el navegador no incluía XMLHTTP de forma nativa, el éxito
del OWA se habría reducido enormemente. El mayor problema
es que faltaban pocas semanas para que se lanzara la última
beta de Internet Explorer 5 previa a su lanzamiento final.
Gracias a sus contactos en la empresa, Alex consiguió que su
tecnología se incluyera en la librería MSXML que incluye
Internet Explorer.
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 45
EL OBJETO XMLHTTPREQUEST
 De hecho, el nombre del objeto (XMLHTTP) se eligió
para tener una buena excusa que justificara su
inclusión en la librería XML de Internet Explorer, ya
que este objeto está mucho más relacionado con
HTTP que con XML.
 Lea la historia completa en
http://www.alexhopmann.com/xmlhttp.htm
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 46
EL OBJETO XMLHTTPREQUEST
 La aplicación AJAX completa más sencilla consiste en una
adaptación del clásico "Hola Mundo".
 En este caso, una aplicación JavaScript descarga un archivo
del servidor y muestra su contenido sin necesidad de recargar
la página.
 En el ejemplo, cuando se carga la página se ejecuta el
método JavaScript que muestra el contenido de un archivo
llamado holamundo.txt que se encuentra en el servidor. La
clave del código anterior es que la petición HTTP y la descarga
de los contenidos del archivo se realizan sin necesidad de
recargar la página.
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 47
LA PRIMERA APLICACIÓN CON AJAX
EJEMPLO
La aplicación AJAX del ejemplo anterior
se compone de cuatro grandes bloques:
1. instanciar el objeto XMLHttpRequest,
2. preparar la función de respuesta,
3. realizar la petición al servidor y
4. ejecutar la función de respuesta.
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 48
LA PRIMERA APLICACIÓN CON AJAX
 Todas las aplicaciones realizadas con técnicas de
AJAX deben instanciar en primer lugar el objeto
XMLHttpRequest, que es el objeto clave que permite
realizar comunicaciones con el servidor en segundo
plano, sin necesidad de recargar las páginas.
 La implementación del objeto XMLHttpRequest
depende de cada navegador, por lo que es necesario
emplear una discriminación sencilla en función del
navegador en el que se está.
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 49
instanciar el objeto XMLHttpRequest
 Una vez obtenida la instancia del objeto XMLHttpRequest, se
prepara la función que se encarga de procesar la respuesta
del servidor.
 La propiedad onreadystatechange del objeto XMLHttpRequest
permite indicar esta función directamente incluyendo su
código mediante una función anónima o indicando una
referencia a una función independiente. En el ejemplo
anterior se indica directamente el nombre de la función:
peticion_http.onreadystatechange = muestraContenido;
 El código anterior indica que cuando la aplicación reciba la
respuesta del servidor, se debe ejecutar la función
muestraContenido(). Como es habitual, la referencia a la
función se indica mediante su nombre sin paréntesis, ya que
de otro modo se estaría ejecutando la función y almacenando
el valor devuelto en la propiedad onreadystatechange.
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 50
PREPARAR LA FUNCIÓN DE RESPUESTA
 Después de preparar la aplicación para la respuesta del
servidor, se realiza la petición HTTP al servidor.
 Las instrucciones realizan el tipo de petición más sencillo que
se puede enviar al servidor. En concreto, se trata de una
petición de tipo GET simple que no envía ningún parámetro al
servidor.
 La petición HTTP se crea mediante el método open(), en el
que se incluye : el tipo de petición (GET), la URL solicitada y
un tercer parámetro que vale true.
 Una vez creada la petición HTTP, se envía al servidor mediante
el método send().
 Este método incluye un parámetro que en el ejemplo anterior
vale null. Más adelante se ven en detalle todos los métodos y
propiedades que permiten hacer las peticiones al servidor.
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 51
REALIZAR LA PETICIÓN AL SERVIDOR
 Por último, cuando se recibe la respuesta del servidor, la
aplicación ejecuta de forma automática la función establecida
anteriormente.
 La función muestraContenido() comprueba en primer lugar
que se ha recibido la respuesta del servidor (mediante el
valor de la propiedad readyState).
 Si se ha recibido alguna respuesta, se comprueba que sea
válida y correcta (comprobando si el código de estado HTTP
devuelto es igual a 200).
 Una vez realizadas las comprobaciones, simplemente se
muestra por pantalla el contenido de la respuesta del servidor
(en este caso, el contenido del archivo solicitado) mediante la
propiedad responseText.
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 52
EJECUTAR LA FUNCIÓN DE RESPUESTA
 En primer lugar, se definen unas variables que se utilizan en
la función que procesa la respuesta del servidor:
var READY_STATE_UNINITIALIZED = 0;
var READY_STATE_LOADING = 1;
var READY_STATE_LOADED = 2;
var READY_STATE_INTERACTIVE = 3;
var READY_STATE_COMPLETE = 4;
 La respuesta del servidor sólo puede corresponder a alguno
de los cinco estados definidos por las variables anteriores. De
esta forma, el código puede utilizar el nombre de cada estado
en vez de su valor numérico, por lo que se facilita la lectura y
el mantenimiento de las aplicaciones.
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 53
MEJORANDO EL CÓDIGO
EJEMPLO
EJ con boton
EJ sin AJAX
EJ sin Alert
 Se crea una función genérica de carga de contenidos
mediante AJAX:
function cargaContenido(url, metodo, funcion) { …
 La función definida admite tres parámetros: la URL del
contenido que se va a cargar, el método utilizado para realizar
la petición HTTP y una referencia a la función que procesa la
respuesta del servidor.
 En primer lugar, la función cargaContenido() inicializa el
objeto XMLHttpRequest (llamado xhr de forma abreviada). Una
vez inicializado, se emplea el objeto peticion_http para
establecer la función que procesa la respuesta del servidor.
 Por último, la función cargaContenido() realiza la petición al
servidor empleando la URL y el método HTTP indicados como
parámetros.
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 54
MEJORANDO EL CÓDIGO
 La función inicializa_xhr() se emplea para encapsular la
creación del objeto XMLHttpRequest
 La función muestraContenido() también se refactoriza para
emplear las variables globales definidas
 Por último, la función descargaArchivo() simplemente realiza
una llamada a la función cargaContenido() con los parámetros
adecuados:
cargaContenido("http://localhost:8080/ajax/holamundo.txt",
"GET", muestraContenido);
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 55
MEJORANDO EL CÓDIGO
 Al cargar la página, el cuadro de texto debe mostrar por defecto
la URL de la propia página.
 Al pulsar el botón "Mostrar Contenidos", se debe descargar
mediante peticiones AJAX el contenido correspondiente a la URL
introducida por el usuario. El contenido de la respuesta recibida
del servidor se debe mostrar en la zona de "Contenidos del
archivo".
 En la zona "Estados de la petición" se debe mostrar en todo
momento el estado en el que se encuentra la petición (No
inicializada, cargando, completada, etc.)
 Mostrar el contenido de todas las cabeceras de la respuesta del
servidor en la zona "Cabeceras HTTP de la respuesta del
servidor".
 Mostrar el código y texto de estado de la respuesta del servidor
en la zona "Código de estado".
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 56
EJEMPLO 2
EJEMPLO
 Funcionamiento
 Al clickear en cualquiera de los botones, se llamará, mediante
el evento onclick, a la función traerDatos() de JavaScript.
 Esta función se encargará de identificar que botón fue el
presionado (mediante un parámetro que se le envía a la
función) y abrirá una conexión XMLHttpRequest al archivo del
servidor para solicitar la información pertinente.
 El servidor enviará la respuesta en texto plano (sin ningún
tipo de formato) y el cliente, al recibirla, la colocará con la
propiedad innerHTML en el div instanciado para este fin.
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 57
EJEMPLO 3
EJEMPLO
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 58
MÉTODOS Y PROPIEDADES DEL OBJETO
XMLHTTPREQUEST
 readyState: valor numérico (entero) que almacena el estado
de la petición
 responseText : El contenido de la respuesta del servidor en
forma de cadena de texto
 responseXML: El contenido de la respuesta del servidor en
formato XML. El objeto devuelto se puede procesar como un
objeto DOM
 Status: El código de estado HTTP devuelto por el servidor (200
para una respuesta correcta, 404 para "No encontrado", 500
para un error de servidor, etc.)
 statusText: El código de estado HTTP devuelto por el servidor
en forma de cadena de texto: "OK", "Not Found", "Internal
Server Error", etc.
 0 No inicializado (objeto creado, pero no se ha
invocado el método open)
 1 Cargando (objeto creado, pero no se ha invocado el
método send)
 2 Cargado (se ha invocado el método send, pero el
servidor aún no ha respondido)
 3 Interactivo (se han recibido algunos datos, aunque
no se puede emplear la propiedad responseText)
 4 Completo (se han recibido todos los datos de la
respuesta del servidor)
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 59
PROPIEDAD READYSTATE
 abort() : Detiene la petición actual.
 getAllResponseHeaders(): Devuelve una cadena de texto con
todas las cabeceras de la respuesta del servidor.
 getResponseHeader("cabecera"): Devuelve una cadena de
texto con el contenido de la cabecera solicitada.
 Onreadystatechange: Responsable de manejar los eventos que
se producen. Se invoca cada vez que se produce un cambio en
el estado de la petición HTTP. Normalmente es una referencia
a una función JavaScript.
 open("metodo", "url"): Establece los parámetros de la petición
que se realiza al servidor. Los parámetros necesarios son el
método HTTP empleado y la URL destino (puede indicarse de
forma absoluta o relativa)
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 60
MÉTODOS DISPONIBLES PARA EL OBJETO
XMLHTTPREQUEST
 send(contenido): Realiza la petición HTTP al servidor.
 setRequestHeader("cabecera", "valor"): Permite establecer
cabeceras personalizadas en la petición HTTP. Se debe
invocar el método open() antes que setRequestHeader().
 El método open() requiere dos parámetros (método HTTP y
URL) y acepta de forma opcional otros tres parámetros.
Definición formal del método open():
open(string metodo, string URL [,boolean asincrono,
string usuario, string password]);
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 61
MÉTODOS DISPONIBLES PARA EL OBJETO
XMLHTTPREQUEST
 http://www.librosweb.es/ajax
26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 62
FUENTE

Contenu connexe

Tendances

Hibernate - JPA @luce 5
Hibernate - JPA @luce 5Hibernate - JPA @luce 5
Hibernate - JPA @luce 5Javier Gamarra
 
Ejercicios de XSD
Ejercicios de XSDEjercicios de XSD
Ejercicios de XSDAbrirllave
 
Bases de datos orientado a objetos Exponer
Bases de datos orientado a objetos ExponerBases de datos orientado a objetos Exponer
Bases de datos orientado a objetos Exponerjorge220395
 
Persistencia en Java - Serialización
Persistencia en Java - SerializaciónPersistencia en Java - Serialización
Persistencia en Java - SerializaciónCarlos Hernando
 
Proveedor act1 uni2_daw_6a
Proveedor act1 uni2_daw_6aProveedor act1 uni2_daw_6a
Proveedor act1 uni2_daw_6afanyto
 
Bases de datos orientado a objetos
Bases de datos orientado a objetosBases de datos orientado a objetos
Bases de datos orientado a objetosjorge220395
 
Base de datos Objeto-Relacional.
Base de datos Objeto-Relacional.Base de datos Objeto-Relacional.
Base de datos Objeto-Relacional.Juan Raul Vergara
 
Tarea de la unidad 7
Tarea de la unidad 7Tarea de la unidad 7
Tarea de la unidad 7Ramon Carenzo
 
Framework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetosFramework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetosAntonio Palomares Sender
 
Practica01 db4o e1
Practica01 db4o e1Practica01 db4o e1
Practica01 db4o e1Thekavenet
 
Java Persistence Api (Jpa)
Java Persistence Api (Jpa)Java Persistence Api (Jpa)
Java Persistence Api (Jpa)Ronald Cuello
 

Tendances (18)

Hibernate - JPA @luce 5
Hibernate - JPA @luce 5Hibernate - JPA @luce 5
Hibernate - JPA @luce 5
 
Tema 2
Tema 2Tema 2
Tema 2
 
Clase viii
Clase viiiClase viii
Clase viii
 
Jpa
JpaJpa
Jpa
 
Ejercicios de XSD
Ejercicios de XSDEjercicios de XSD
Ejercicios de XSD
 
Bases de datos orientado a objetos Exponer
Bases de datos orientado a objetos ExponerBases de datos orientado a objetos Exponer
Bases de datos orientado a objetos Exponer
 
Persistencia en Java - Serialización
Persistencia en Java - SerializaciónPersistencia en Java - Serialización
Persistencia en Java - Serialización
 
Programacion o o
Programacion o oProgramacion o o
Programacion o o
 
Proveedor act1 uni2_daw_6a
Proveedor act1 uni2_daw_6aProveedor act1 uni2_daw_6a
Proveedor act1 uni2_daw_6a
 
Apuntes de XSD
Apuntes de XSDApuntes de XSD
Apuntes de XSD
 
Introducción a XML Schema
Introducción a XML SchemaIntroducción a XML Schema
Introducción a XML Schema
 
Bases de datos orientado a objetos
Bases de datos orientado a objetosBases de datos orientado a objetos
Bases de datos orientado a objetos
 
Base de datos Objeto-Relacional.
Base de datos Objeto-Relacional.Base de datos Objeto-Relacional.
Base de datos Objeto-Relacional.
 
Tarea de la unidad 7
Tarea de la unidad 7Tarea de la unidad 7
Tarea de la unidad 7
 
Framework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetosFramework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetos
 
Practica01 db4o e1
Practica01 db4o e1Practica01 db4o e1
Practica01 db4o e1
 
XSLT y XPATH
XSLT y XPATHXSLT y XPATH
XSLT y XPATH
 
Java Persistence Api (Jpa)
Java Persistence Api (Jpa)Java Persistence Api (Jpa)
Java Persistence Api (Jpa)
 

En vedette (16)

BabySari
BabySariBabySari
BabySari
 
CSS 5 - Unidades y Valores
CSS 5 - Unidades y ValoresCSS 5 - Unidades y Valores
CSS 5 - Unidades y Valores
 
Busqueda Entre Adversarios
Busqueda Entre AdversariosBusqueda Entre Adversarios
Busqueda Entre Adversarios
 
Introducción a CSS 2
Introducción a CSS 2Introducción a CSS 2
Introducción a CSS 2
 
Lógica de primer orden
Lógica de primer ordenLógica de primer orden
Lógica de primer orden
 
Diagramas de Producción - BabySari
Diagramas de Producción - BabySariDiagramas de Producción - BabySari
Diagramas de Producción - BabySari
 
Introduccion a CSS I
Introduccion a CSS IIntroduccion a CSS I
Introduccion a CSS I
 
Introduccion Css
Introduccion CssIntroduccion Css
Introduccion Css
 
Inferencia en Lógica de Primer Orden
Inferencia en Lógica de Primer OrdenInferencia en Lógica de Primer Orden
Inferencia en Lógica de Primer Orden
 
Introducción a Javascript I
Introducción a Javascript IIntroducción a Javascript I
Introducción a Javascript I
 
¿Qué es Coworking?
¿Qué es Coworking?¿Qué es Coworking?
¿Qué es Coworking?
 
Bootstrap, un framework CSS
Bootstrap, un framework CSSBootstrap, un framework CSS
Bootstrap, un framework CSS
 
Silabo
SilaboSilabo
Silabo
 
Manual user diseño web con html y css
Manual user   diseño web con html y cssManual user   diseño web con html y css
Manual user diseño web con html y css
 
Extension e investigacion1
Extension e investigacion1Extension e investigacion1
Extension e investigacion1
 
Extension e investigacion
Extension e investigacionExtension e investigacion
Extension e investigacion
 

Similaire à Intro AJAX

01 Ext Js Introduccion
01 Ext Js   Introduccion01 Ext Js   Introduccion
01 Ext Js IntroduccionMayer Horna
 
Balotario resuelto
Balotario resueltoBalotario resuelto
Balotario resueltoAlexiToxD
 
Objeto relacional bases datos 2
Objeto relacional bases datos 2Objeto relacional bases datos 2
Objeto relacional bases datos 2Velmuz Buzz
 
Como usar ajax con jquery
Como usar ajax con jqueryComo usar ajax con jquery
Como usar ajax con jqueryiva29234
 
Programación_del_lado_del_servidor......
Programación_del_lado_del_servidor......Programación_del_lado_del_servidor......
Programación_del_lado_del_servidor......SaulSalinasNeri
 
Servicio web java php perl google
Servicio web  java php perl googleServicio web  java php perl google
Servicio web java php perl googleSeveredDRA
 
Conceptos Introductorios Del Web 2
Conceptos Introductorios Del Web 2Conceptos Introductorios Del Web 2
Conceptos Introductorios Del Web 2Michelle Aguirre
 
Integración de aplicaciones Java
Integración de aplicaciones JavaIntegración de aplicaciones Java
Integración de aplicaciones JavaIker Canarias
 
El Mal Odiado Javascript
El Mal Odiado JavascriptEl Mal Odiado Javascript
El Mal Odiado JavascriptEl Jota
 
AJAX a cuerda Lo básico sobre AJAX y su funcionamiento
AJAX a cuerda
Lo básico sobre AJAX y su funcionamientoAJAX a cuerda
Lo básico sobre AJAX y su funcionamiento
AJAX a cuerda Lo básico sobre AJAX y su funcionamientoRoberto Allende
 

Similaire à Intro AJAX (20)

Presentacion ajax
Presentacion   ajaxPresentacion   ajax
Presentacion ajax
 
Ajax Huancayo
Ajax HuancayoAjax Huancayo
Ajax Huancayo
 
01 Ext Js Introduccion
01 Ext Js   Introduccion01 Ext Js   Introduccion
01 Ext Js Introduccion
 
Ajax
AjaxAjax
Ajax
 
AJAX EN CURSO PHP
AJAX EN CURSO PHPAJAX EN CURSO PHP
AJAX EN CURSO PHP
 
Ajax
AjaxAjax
Ajax
 
Balotario resuelto
Balotario resueltoBalotario resuelto
Balotario resuelto
 
Objeto relacional bases datos 2
Objeto relacional bases datos 2Objeto relacional bases datos 2
Objeto relacional bases datos 2
 
Ajax
AjaxAjax
Ajax
 
Curso ajax
Curso ajaxCurso ajax
Curso ajax
 
Tutorial - REST con java (JAX-RS 2.0)
Tutorial - REST con java (JAX-RS 2.0)Tutorial - REST con java (JAX-RS 2.0)
Tutorial - REST con java (JAX-RS 2.0)
 
Como usar ajax con jquery
Como usar ajax con jqueryComo usar ajax con jquery
Como usar ajax con jquery
 
Lectura de un archivo xml de manera local en wp
Lectura de un archivo xml de manera local en wpLectura de un archivo xml de manera local en wp
Lectura de un archivo xml de manera local en wp
 
Programación_del_lado_del_servidor......
Programación_del_lado_del_servidor......Programación_del_lado_del_servidor......
Programación_del_lado_del_servidor......
 
Servicio web java php perl google
Servicio web  java php perl googleServicio web  java php perl google
Servicio web java php perl google
 
Conceptos Introductorios Del Web 2
Conceptos Introductorios Del Web 2Conceptos Introductorios Del Web 2
Conceptos Introductorios Del Web 2
 
Clase
ClaseClase
Clase
 
Integración de aplicaciones Java
Integración de aplicaciones JavaIntegración de aplicaciones Java
Integración de aplicaciones Java
 
El Mal Odiado Javascript
El Mal Odiado JavascriptEl Mal Odiado Javascript
El Mal Odiado Javascript
 
AJAX a cuerda Lo básico sobre AJAX y su funcionamiento
AJAX a cuerda
Lo básico sobre AJAX y su funcionamientoAJAX a cuerda
Lo básico sobre AJAX y su funcionamiento
AJAX a cuerda Lo básico sobre AJAX y su funcionamiento
 

Plus de Héctor Estigarribia

Introducción a Javascript: Formularios
Introducción a Javascript: FormulariosIntroducción a Javascript: Formularios
Introducción a Javascript: FormulariosHéctor Estigarribia
 
Agentes Lógicos: Lógica proposicional
Agentes Lógicos: Lógica proposicionalAgentes Lógicos: Lógica proposicional
Agentes Lógicos: Lógica proposicionalHéctor Estigarribia
 
Agentes Lógicos: El mundo de Wumpus
Agentes Lógicos: El mundo de WumpusAgentes Lógicos: El mundo de Wumpus
Agentes Lógicos: El mundo de WumpusHéctor Estigarribia
 
Introduccion a HTML - XHTML clase 04
Introduccion a HTML - XHTML clase 04Introduccion a HTML - XHTML clase 04
Introduccion a HTML - XHTML clase 04Héctor Estigarribia
 
Problemas de Satisfaccion de restricciones (PSR)
Problemas de Satisfaccion de restricciones (PSR)Problemas de Satisfaccion de restricciones (PSR)
Problemas de Satisfaccion de restricciones (PSR)Héctor Estigarribia
 
Ejercicios de búsqueda a Ciegas y Búsqueda informada
Ejercicios de búsqueda a Ciegas y Búsqueda informadaEjercicios de búsqueda a Ciegas y Búsqueda informada
Ejercicios de búsqueda a Ciegas y Búsqueda informadaHéctor Estigarribia
 
INTRODUCCIÓN A HTML – XHTML – Clase 03
INTRODUCCIÓN A HTML – XHTML – Clase 03INTRODUCCIÓN A HTML – XHTML – Clase 03
INTRODUCCIÓN A HTML – XHTML – Clase 03Héctor Estigarribia
 
Búsqueda informada y exploración
Búsqueda informada y exploraciónBúsqueda informada y exploración
Búsqueda informada y exploraciónHéctor Estigarribia
 
Introduccion a HTML - XHTML. Clase 02
Introduccion a HTML - XHTML. Clase 02Introduccion a HTML - XHTML. Clase 02
Introduccion a HTML - XHTML. Clase 02Héctor Estigarribia
 
Introduccion a HTML - XHTML - Clase 01
Introduccion a HTML - XHTML - Clase 01Introduccion a HTML - XHTML - Clase 01
Introduccion a HTML - XHTML - Clase 01Héctor Estigarribia
 
SOLUCIÓN DE PROBLEMAS MEDIANTE BÚSQUEDA
SOLUCIÓN DE PROBLEMAS MEDIANTE BÚSQUEDASOLUCIÓN DE PROBLEMAS MEDIANTE BÚSQUEDA
SOLUCIÓN DE PROBLEMAS MEDIANTE BÚSQUEDAHéctor Estigarribia
 
Inteligencia Artificial: Introducción - Reseña Histórica
Inteligencia Artificial: Introducción - Reseña HistóricaInteligencia Artificial: Introducción - Reseña Histórica
Inteligencia Artificial: Introducción - Reseña HistóricaHéctor Estigarribia
 
Altivar18 Lang: Deutsch - ENg- Spanish - French
Altivar18 Lang: Deutsch - ENg- Spanish - FrenchAltivar18 Lang: Deutsch - ENg- Spanish - French
Altivar18 Lang: Deutsch - ENg- Spanish - FrenchHéctor Estigarribia
 

Plus de Héctor Estigarribia (17)

Introducción a Javascript: Formularios
Introducción a Javascript: FormulariosIntroducción a Javascript: Formularios
Introducción a Javascript: Formularios
 
Agentes Lógicos: Lógica proposicional
Agentes Lógicos: Lógica proposicionalAgentes Lógicos: Lógica proposicional
Agentes Lógicos: Lógica proposicional
 
Agentes Lógicos: El mundo de Wumpus
Agentes Lógicos: El mundo de WumpusAgentes Lógicos: El mundo de Wumpus
Agentes Lógicos: El mundo de Wumpus
 
Introduccion a HTML - XHTML clase 04
Introduccion a HTML - XHTML clase 04Introduccion a HTML - XHTML clase 04
Introduccion a HTML - XHTML clase 04
 
Problemas de Satisfaccion de restricciones (PSR)
Problemas de Satisfaccion de restricciones (PSR)Problemas de Satisfaccion de restricciones (PSR)
Problemas de Satisfaccion de restricciones (PSR)
 
Ejercicios de búsqueda a Ciegas y Búsqueda informada
Ejercicios de búsqueda a Ciegas y Búsqueda informadaEjercicios de búsqueda a Ciegas y Búsqueda informada
Ejercicios de búsqueda a Ciegas y Búsqueda informada
 
INTRODUCCIÓN A HTML – XHTML – Clase 03
INTRODUCCIÓN A HTML – XHTML – Clase 03INTRODUCCIÓN A HTML – XHTML – Clase 03
INTRODUCCIÓN A HTML – XHTML – Clase 03
 
Búsqueda informada y exploración
Búsqueda informada y exploraciónBúsqueda informada y exploración
Búsqueda informada y exploración
 
Introduccion a HTML - XHTML. Clase 02
Introduccion a HTML - XHTML. Clase 02Introduccion a HTML - XHTML. Clase 02
Introduccion a HTML - XHTML. Clase 02
 
Introduccion a HTML - XHTML - Clase 01
Introduccion a HTML - XHTML - Clase 01Introduccion a HTML - XHTML - Clase 01
Introduccion a HTML - XHTML - Clase 01
 
SOLUCIÓN DE PROBLEMAS MEDIANTE BÚSQUEDA
SOLUCIÓN DE PROBLEMAS MEDIANTE BÚSQUEDASOLUCIÓN DE PROBLEMAS MEDIANTE BÚSQUEDA
SOLUCIÓN DE PROBLEMAS MEDIANTE BÚSQUEDA
 
Inteligencia Artificial: Introducción - Reseña Histórica
Inteligencia Artificial: Introducción - Reseña HistóricaInteligencia Artificial: Introducción - Reseña Histórica
Inteligencia Artificial: Introducción - Reseña Histórica
 
Agentes Inteligentes
Agentes InteligentesAgentes Inteligentes
Agentes Inteligentes
 
Consejos para powerpoint
Consejos para powerpointConsejos para powerpoint
Consejos para powerpoint
 
Altivar18 Lang: Deutsch - ENg- Spanish - French
Altivar18 Lang: Deutsch - ENg- Spanish - FrenchAltivar18 Lang: Deutsch - ENg- Spanish - French
Altivar18 Lang: Deutsch - ENg- Spanish - French
 
Yas manual j1000frecuencia
Yas manual j1000frecuenciaYas manual j1000frecuencia
Yas manual j1000frecuencia
 
Word.basico
Word.basicoWord.basico
Word.basico
 

Dernier

Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfcoloncopias5
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfDaniel Ángel Corral de la Mata, Ph.D.
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxlclcarmen
 
Plan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPEPlan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPELaura Chacón
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
ÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdf
ÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdfÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdf
ÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdfluisantoniocruzcorte1
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxYeseniaRivera50
 
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdf
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdfLA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdf
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdfNataliaMalky1
 
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxc3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxMartín Ramírez
 
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)veganet
 
Fundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfFundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfsamyarrocha1
 
Los Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadLos Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadJonathanCovena1
 
Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleJonathanCovena1
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxdanalikcruz2000
 
CIENCIAS NATURALES 4 TO ambientes .docx
CIENCIAS NATURALES 4 TO  ambientes .docxCIENCIAS NATURALES 4 TO  ambientes .docx
CIENCIAS NATURALES 4 TO ambientes .docxAgustinaNuez21
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxOscarEduardoSanchezC
 

Dernier (20)

Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
 
PPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptxPPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptx
 
Plan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPEPlan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPE
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
ÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdf
ÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdfÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdf
ÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdf
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
 
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdf
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdfLA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdf
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdf
 
VISITA À PROTEÇÃO CIVIL _
VISITA À PROTEÇÃO CIVIL                  _VISITA À PROTEÇÃO CIVIL                  _
VISITA À PROTEÇÃO CIVIL _
 
Earth Day Everyday 2024 54th anniversary
Earth Day Everyday 2024 54th anniversaryEarth Day Everyday 2024 54th anniversary
Earth Day Everyday 2024 54th anniversary
 
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxc3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
 
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
 
Fundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfFundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdf
 
Los Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadLos Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la Sostenibilidad
 
Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo Sostenible
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
 
CIENCIAS NATURALES 4 TO ambientes .docx
CIENCIAS NATURALES 4 TO  ambientes .docxCIENCIAS NATURALES 4 TO  ambientes .docx
CIENCIAS NATURALES 4 TO ambientes .docx
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
 
TL/CNL – 2.ª FASE .
TL/CNL – 2.ª FASE                       .TL/CNL – 2.ª FASE                       .
TL/CNL – 2.ª FASE .
 

Intro AJAX

  • 1. PARTE IINTRODUCCION A AJAX 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 1
  • 2.  El término AJAX es un acrónimo de Asynchronous JavaScript + XML, que se puede traducir como "JavaScript asíncrono + XML".  El término AJAX se presentó por primera vez en el artículo "Ajax: A New Approach to Web Applications publicado por Jesse James Garrett* el 18 de Febrero de 2005.  El artículo define AJAX de la siguiente forma: “ Ajax no es una tecnología en sí misma. Se trata de varias tecnologías independientes que se unen de formas nuevas y sorprendentes.”  *Curiosidad: También trabajó en Mozilla 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia HISTORIA 2
  • 3. Las tecnologías que forman AJAX son:  XHTML y CSS, para crear una presentación basada en estándares.  DOM, para la interacción y manipulación dinámica de la presentación.  XML, XSLT y JSON, para el intercambio y la manipulación de información.  XMLHttpRequest, para el intercambio asíncrono de información.  JavaScript, para unir todas las demás tecnologías. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia TECNOLOGÍAS 3
  • 4.  La técnica tradicional para crear aplicaciones web funciona correctamente, pero no crea una buena sensación al usuario. Al realizar peticiones continuas al servidor, el usuario debe esperar a que se recargue la página con los cambios solicitados.  AJAX permite mejorar completamente la interacción del usuario con la aplicación, evitando las recargas constantes de la página, ya que el intercambio de información con el servidor se produce en un segundo plano. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia JAVASCRIPT ASÍNCRONO 4
  • 5. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia MODELO TRADICIONAL DE APLICACIÓN WEB NAVEGADOR - CLIENTE SISTEMAS – SERVER INTERFASE DE USUARIO SERVIDOR WEB BASE DE DATOS SOLICITUD HTTP DATOS HTML + CSS TRANSPORTE HTTP (S) 5
  • 6. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia MODELO AJAX DE APLICACIÓN WEB NAVEGADOR – CLIEN TE SISTEMAS – SERVER INTERFASE DE USUARIO SERVIDOR WEB BASE DE DATOS SOLICITUD HTTP DATOS XML TRANSPORTE HTTP (S) MOTOR AJAX DATOS HTML + CSS LLAMADA JAVASCRIPT 6
  • 7. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia MODELO CLÁSICO DE APLICACIONES WEB (SÍNCRONO) CLIENTE SERVIDOR TIEMPO ACTIVIDAD DEL USUARIO ACTIVIDAD DEL USUARIO ACTIVIDAD DEL USUARIO PROCESO DEL SISTEMA PROCESO DEL SISTEMA TRANS MISION DE DATOS TRANS MISION DE DATOS TRANS MISION DE DATOS TRANS MISION DE DATOS 7
  • 8. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia MODELO AJAX DE APLICACIONES WEB (ASÍNCRONO) CLIENTE SERVIDOR TIEMPO ACTIVIDAD DEL USUARIO PROCESO DEL SISTEMA PROCESO DEL SISTEMA TRANS MISION DE DATOS TRANS MISION DE DATOS TRANS MISION DE DATOS TRANS MISION DE DATOS PROCESO DEL SISTEMA TRANS MISION DE DATOS TRANS MISION DE DATOS TRATAMIENTO LADO CLIENTE INTERFASE DE USUARIO MOTOR AJAX I O I O I O I O I O 8
  • 9.  Las peticiones HTTP al servidor se sustituyen por peticiones JavaScript que se realizan al elemento encargado de AJAX.  Las peticiones más simples no requieren intervención del servidor, por lo que la respuesta es inmediata.  Si la interacción requiere una respuesta del servidor, la petición se realiza de forma asíncrona mediante AJAX.  En este caso, la interacción del usuario tampoco se ve interrumpida por recargas de página o largas esperas por la respuesta del servidor. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia APLICACIONES ASÍNCRONAS 9
  • 10. GMAIL OUTLOOK GOOGLE MAPS GOOGLE DOCS MEEBO FLICKR 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia ALGUNAS APLCACIONES CONOCIDAS BASADAS EN AJAX 10
  • 11. Los objetos se emplean en JavaScript para organizar el código fuente de una forma más clara y para encapsular métodos y funciones comunes. La forma más sencilla de crear un objeto es mediante la palabra reservada new seguida del nombre de la clase que se quiere instanciar: var elObjeto = new Object(); var laCadena = new String(); 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia OBJETOS 11
  • 12.  Un objeto de JavaScript es un array asociativo formado por las propiedades y los métodos del objeto.  Un array asociativo es aquel en el que cada elemento no está asociado a su posición numérica dentro del array, sino que está asociado a otro valor específico.  La forma tradicional de definir los arrays asociativos es mediante la clase Array: var elArray = new Array(); elArray['primero'] = 1; elArray['segundo'] = 2; alert(elArray['primero']); alert(elArray[0]); 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia OBJETOS EJEMPLO 12
  • 13.  Como los objetos son en realidad arrays asociativos que almacenan sus propiedades y métodos, la forma más directa para definir esas propiedades y métodos es la notación de puntos:  elObjeto.id = "10";  elObjeto.nombre = "Objeto de prueba";  Al contrario de lo que sucede en otros lenguajes orientados a objetos, como por ejemplo Java, para asignar el valor de una propiedad no es necesario que la clase tenga definida previamente esa propiedad. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia PROPIEDADES 13
  • 14.  Los métodos se definen asignando funciones al objeto. Si la función no está definida previamente, es posible crear una función anónima para asignarla al nuevo método del objeto.  Uno de los aspectos más importantes del ejemplo anterior es el uso de la palabra reservada this.  La palabra this se suele utilizar habitualmente dentro de los métodos de un objeto y siempre hace referencia al objeto que está llamado a ese método. elObjeto.muestraId = function() { alert("El ID del objeto es " + this.id); } 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia MÉTODOS EJEMPLO 14
  • 15.  Además de las funciones anónimas, también es posible asignar a los métodos de un objeto funciones definidas con anterioridad: function obtieneId() { return this.id; } elObjeto.obtieneId = obtieneId; 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia MÉTODOS 15
  • 16.  Para asignar una función externa al método de un objeto, sólo se debe indicar el nombre de la función externa sin paréntesis.  Si se utilizaran los paréntesis el objeto no tendría un método llamado obtieneId, sino una propiedad con ese nombre y con un valor igual al resultado devuelto por la función externa. function obtieneId() { return this.id; } elObjeto.obtieneId = obtieneId(); 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia MÉTODOS EJEMPLO 16
  • 17.  Es posible crear objetos complejos que contengan otros objetos: var Aplicacion = new Object(); Aplicacion.Modulos = new Array(); Aplicacion.Modulos[0] = new Object(); Aplicacion.Modulos[0].titulo = "Lector RSS"; var inicial = new Object(); inicial.estado = 1; inicial.publico = 0; inicial.nombre = "Modulo_RSS"; inicial.datos = new Object(); Aplicacion.Modulos[0].objetoInicial = inicial; 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia MÉTODOS EJEMPLO 17
  • 18.  En el ejemplo anterior, se define un objeto principal llamado Aplicacion que a su vez contiene varios objetos.  La propiedad Modulos de la aplicación es un array en el que cada elemento es un objeto que representa a un módulo.  A su vez, cada objeto Modulo tiene una propiedad llamada titulo y otra llamada objetoInicial que también es un objeto con las propiedades y valores iniciales del módulo. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia MÉTODOS 18
  • 19.  JavaScript define un par de métodos denominados apply() y call() que son muy útiles para las funciones.  Ambos métodos permiten ejecutar una función como si fuera un método de otro objeto.  La única diferencia entre los dos métodos es la forma en la que se pasan los argumentos a la función. function miFuncion(x) { return this.numero + x; } var elObjeto = new Object(); elObjeto.numero = 5; var resultado = miFuncion.call(elObjeto, 4); alert(resultado); 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia MÉTODOS APPLY() Y CALL() 19
  • 20.  El método apply() es idéntico al método call(), salvo que en este caso los parámetros se pasan como un array: function miFuncion(x) { return this.numero + x; } var elObjeto = new Object(); elObjeto.numero = 5; var resultado = miFuncion.apply(elObjeto, [4]); alert(resultado); 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 20 MÉTODOS APPLY() Y CALL() EJEMPLO
  • 21.  La notación JSON (JavaScript Object Notation) es un formato sencillo para el intercambio de información. El formato JSON permite representar estructuras de datos (arrays) y objetos (arrays asociativos) en forma de texto.  La notación de objetos mediante JSON es una de las características principales de JavaScript y es un mecanismo definido en los fundamentos básicos del lenguaje.  En los últimos años, JSON se ha convertido en una alternativa al formato XML, ya que es más fácil de leer y escribir, además de ser mucho más conciso.  No obstante, XML es superior técnicamente porque es un lenguaje de marcado, mientras que JSON es simplemente un formato para intercambiar datos. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 21 JSON
  • 22.  Como ya se sabe, la notación tradicional de los arrays es tediosa cuando existen muchos elementos: var modulos = new Array(); modulos[0] = "Lector RSS"; modulos[1] = "Gestor email"; modulos[2] = "Agenda"; modulos[3] = "Buscador"; modulos[4] = "Enlaces";  Para crear un array normal mediante JSON, se indican sus valores separados por comas y encerrados entre corchetes. Por lo tanto, el ejemplo anterior se puede reescribir de la siguiente manera utilizando la notación JSON: var modulos = ["Lector RSS", "Gestor email", "Agenda", "Buscador", "Enlaces"]; 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 22 JSON – ARRAYS NORMALES
  • 23. var modulos = new Array(); modulos.titulos = new Array(); modulos.titulos['rss'] = "Lector RSS"; modulos.titulos['email'] = "Gestor de email"; modulos.titulos['agenda'] = "Agenda"; 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 23 JSON – ARRAYS ASOCIATIVOS var modulos = new Array(); modulos.titulos = new Array(); modulos.titulos.rss = "Lector RSS"; modulos.titulos.email = "Gestor de email"; modulos.titulos.agenda = "Agenda"; var modulos = new Array(); modulos.titulos = {rss: "Lector RSS", email: "Gestor de email", agenda: "Agenda"}; NOTACIÓN TRADICIONAL NOTACIÓN DE PUNTOS NOTACIÓN JSON
  • 24. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 24 JSON – OBJETOS COMPLEJOS var modulo = new Object(); modulo.titulo = "Lector RSS"; modulo.objetoInicial = new Object(); modulo.objetoInicial.estado = 1; modulo.objetoInicial.publico = 0; modulo.objetoInicial.nombre = "Modulo_RSS"; modulo.objetoInicial.datos = new Object(); var modulo = { titulo : "Lector RSS", objetoInicial : { estado : 1, publico : 0, nombre : "Modulo RSS", datos : {} } }; NOTACIÓN DE PUNTOS NOTACIÓN JSON
  • 25.  La forma habitual de trabajo consiste en definir clases a partir de las cuales se crean los objetos con los que trabajan las aplicaciones.  Sin embargo, JavaScript no permite crear clases similares a las de lenguajes como Java o C++.  De hecho, la palabra class sólo está reservada para su uso en futuras versiones de JavaScript.  A pesar de estas limitaciones, es posible utilizar en JavaScript unos elementos parecidos a las clases y que se denominan pseudoclases. Los conceptos que se utilizan para simular las clases son las funciones constructoras y el prototype de los objetos. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 25 CLASES
  • 26.  JavaScript utiliza funciones para simular los constructores de objetos, por lo que estas funciones se denominan "funciones constructoras".  El siguiente ejemplo crea una función llamada Factura que se utiliza para crear objetos que representan una factura. function Factura(idFactura, idCliente) { this.idFactura = idFactura; this.idCliente = idCliente; } 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 26 FUNCIONES CONSTRUCTORAS
  • 27.  Después de definir la función anterior, es posible crear un objeto de tipo Factura y simular el funcionamiento de un constructor: var laFactura = new Factura(3, 7);  Así, el objeto laFactura es de tipo Factura, con todas sus propiedades y métodos y se puede acceder a ellos utilizando la notación de puntos habitual: alert("cliente = " + laFactura.idCliente + ", factura = " + laFactura.idFactura); 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 27 FUNCIONES CONSTRUCTORAS EJEMPLO
  • 28.  Las funciones constructoras no solamente pueden establecer las propiedades del objeto, sino que también pueden definir sus métodos. Siguiendo con el ejemplo anterior, se puede crear un objeto completo llamado Factura con sus propiedades y métodos: function Factura(idFactura, idCliente) { this.idFactura = idFactura; this.idCliente = idCliente; this.muestraCliente = function() { alert(this.idCliente); } this.muestraId = function() { alert(this.idFactura); } } 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 28 PROTOTYPE
  • 29.  Una vez definida la pseudoclase mediante la función constructora, ya es posible crear objetos de ese tipo. En el siguiente ejemplo se crean dos objetos diferentes y se emplean sus métodos: var laFactura = new Factura(3, 7); laFactura.muestraCliente(); var otraFactura = new Factura(5, 4); otraFactura.muestraId(); 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 29 PROTOTYPE EJEMPLO
  • 30. Incluir los métodos de los objetos como funciones dentro de la propia función constructora, tiene un gran inconveniente que la hace poco aconsejable. En el ejemplo anterior, las funciones muestraCliente() y muestraId() se crean de nuevo por cada objeto creado. En efecto, con esta técnica, cada vez que se instancia un objeto, se definen tantas nuevas funciones como métodos incluya la función constructora. Esto afecta al rendimiento! 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 30 PROTOTYPE
  • 31.  Afortunadamente, JavaScript incluye una propiedad que no está presente en otros lenguajes de programación y que soluciona este inconveniente. La propiedad se conoce con el nombre de prototype y es una de las características más poderosas de JavaScript.  Todos los objetos de JavaScript incluyen una referencia interna a otro objeto llamado prototype o "prototipo".  Cualquier propiedad o método que contenga el objeto prototipo, está presente de forma automática en el objeto original.  En cierto modo, se puede decir que el prototype es el molde con el que se fabrica cada objeto de ese tipo.  Si se modifica el molde o se le añaden nuevas características, todos los objetos fabricados con ese molde tendrán esas características.26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 31 PROTOTYPE
  • 32.  Normalmente los métodos no varían de un objeto a otro del mismo tipo, por lo que se puede evitar el problema de rendimiento comentado anteriormente añadiendo los métodos al prototipo a partir del cual se crean los objetos. function Factura(idFactura, idCliente) { this.idFactura = idFactura; this.idCliente = idCliente; } Factura.prototype.muestraCliente = function() { alert(this.idCliente); } Factura.prototype.muestraId = function() { alert(this.idFactura); }  No se crean dos nuevas funciones por cada objeto, sino que se definen únicamente dos funciones para todos los objetos creados. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 32 PROTOTYPE EJEMPLO
  • 33. Los lenguajes orientados a objetos disponen, entre otros, de los conceptos de herencia entre clases y de ámbito (scope) de sus métodos y propiedades (public, private, protected). Sin embargo, JavaScript no dispone de forma nativa ni de herencia ni de ámbitos. Si se requieren ambos mecanismos, la única opción es simular su funcionamiento mediante clases, funciones y métodos desarrollados a medida. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 33 HERENCIA
  • 34.  Algunas técnicas simulan el uso de propiedades privadas prefijando su nombre con un guión bajo, para distinguirlas del resto de propiedades públicas.  Para simular la herencia de clases, algunas librerías como Prototype añaden un método a la clase Object llamado extend() y que copia las propiedades de una clase origen en otra clase destino: Object.extend = function(destination, source) { for (var property in source) { destination[property] = source[property]; } return destination; } 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 34 HERENCIA
  • 35.  Las versiones 3.0 de los navegadores Internet Explorer y Netscape Navigator introdujeron el concepto de Browser Object Model o BOM, que permite acceder y modificar las propiedades de las ventanas del propio navegador.  Mediante BOM, es posible redimensionar y mover la ventana del navegador, modificar el texto que se muestra en la barra de estado y realizar muchas otras manipulaciones no relacionadas con el contenido de la página HTML.  El mayor inconveniente de BOM es que, al contrario de lo que sucede con DOM, ninguna entidad se encarga de estandarizarlo o definir unos mínimos de interoperabilidad entre navegadores. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 35 BOM (BROWSER OBJECT MODEL)
  • 36. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 36 BOM (BROWSER OBJECT MODEL)  El BOM está compuesto por varios objetos relacionados entre sí. El siguiente esquema muestra los objetos de BOM y su relación:
  • 37. El objeto window representa la ventana completa del navegador. BOM define cuatro métodos para manipular el tamaño y la posición de la ventana: ▪ moveBy(x, y) ▪ moveTo(x, y) ▪ resizeBy(x, y) ▪ resizeTo(x, y) 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 37 EL OBJETO WINDOW
  • 38.  A continuación se muestran algunos ejemplos de uso de estas funciones: // Mover la ventana 20 píxel hacia la derecha y 30 píxel hacia abajo window.moveBy(20, 30); // Redimensionar la ventana hasta un tamaño de 250 x 250 window.resizeTo(250, 250); // Agrandar la altura de la ventana en 50 píxel window.resizeBy(0, 50); // Colocar la ventana en la esquina izquierda superior de la ventana window.moveTo(0, 0); 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 38 EL OBJETO WINDOW
  • 39.  function muestraMensaje() {  alert("Este mensaje se muestra cada segundo");  }  setInterval(muestraMensaje, 1000); 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 39 SET TIME OUT – SET INTERVAL function muestraMensaje() { alert("Han transcurrido 3 segundos desde que me programaron"); } var id = setTimeout(muestraMensaje, 3000);
  • 40.  El objeto document es el único que pertenece tanto al DOM como al BOM.  Desde el punto de vista del BOM, el objeto document proporciona información sobre la propia página HTML. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 40 EL OBJETO DOCUMENT
  • 41.  El objeto location es uno de los objetos más útiles del BOM. Debido a la falta de estandarización, location es una propiedad tanto del objeto window como del objeto document.  El objeto location representa la URL de la página HTML que se muestra en la ventana del navegador y proporciona varias propiedades útiles para el manejo de la URL: Hash, host, hostname, href, pathname, port, protocol, search 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 41 EL OBJETO LOCATION
  • 42.  El objeto navigator es uno de los primeros objetos que incluyó el BOM y permite obtener información sobre el propio navegador.  En Internet Explorer, el objeto navigator también se puede acceder a través del objeto clientInformation.  Aunque es uno de los objetos menos estandarizados, algunas de sus propiedades son comunes en casi todos los navegadores.  A continuación se muestran algunas de esas propiedades:  appCodename, appName, appMinorVersion, appVersion, browserLanguaje, cookieEnabled, cpuClass, javaEnabled, languaje, mimeTypes, onLine, osCpu, plattform, plugins, etc. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 42 EL OBJETO NAVIGATOR
  • 43.  El objeto screen se utiliza para obtener información sobre la pantalla del usuario.  Uno de los datos más importantes que proporciona el objeto screen es la resolución del monitor en el que se están visualizando las páginas.  Los diseñadores de páginas web necesitan conocer las resoluciones más utilizadas por los usuarios para adaptar sus diseños a esas resoluciones.  Las siguientes propiedades están disponibles en el objeto screen: availHeight, availWidth, colorDepth, height, width 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 43 EL OBJETO SCREEN
  • 44.  Todo comenzó en 1998, cuando Alex Hopmann y su equipo se encontraban desarrollando la entonces futura versión de Exchange 2000. El punto débil del servidor de correo electrónico era su cliente vía web, llamado OWA (Outlook Web Access).  Durante el desarrollo de OWA, se evaluaron dos opciones: un cliente formado sólo por páginas HTML estáticas que se recargaban constantemente y un cliente realizado completamente con HTML dinámico o DHTML.  Alex Hopmann pudo ver las dos opciones y se decantó por la basada en DHTML. Sin embargo, para ser realmente útil a esta última le faltaba un componente esencial: "algo" que evitara tener que enviar continuamente los formularios con datos al servidor. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 44 EL OBJETO XMLHTTPREQUEST
  • 45.  Motivado por las posibilidades futuras de OWA, Alex creó en un solo fin de semana la primera versión de lo que denominó XMLHTTP.  La primera demostración de las posibilidades de la nueva tecnología fue un éxito, pero faltaba lo más difícil: incluir esa tecnología en el navegador Internet Explorer.  Si el navegador no incluía XMLHTTP de forma nativa, el éxito del OWA se habría reducido enormemente. El mayor problema es que faltaban pocas semanas para que se lanzara la última beta de Internet Explorer 5 previa a su lanzamiento final. Gracias a sus contactos en la empresa, Alex consiguió que su tecnología se incluyera en la librería MSXML que incluye Internet Explorer. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 45 EL OBJETO XMLHTTPREQUEST
  • 46.  De hecho, el nombre del objeto (XMLHTTP) se eligió para tener una buena excusa que justificara su inclusión en la librería XML de Internet Explorer, ya que este objeto está mucho más relacionado con HTTP que con XML.  Lea la historia completa en http://www.alexhopmann.com/xmlhttp.htm 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 46 EL OBJETO XMLHTTPREQUEST
  • 47.  La aplicación AJAX completa más sencilla consiste en una adaptación del clásico "Hola Mundo".  En este caso, una aplicación JavaScript descarga un archivo del servidor y muestra su contenido sin necesidad de recargar la página.  En el ejemplo, cuando se carga la página se ejecuta el método JavaScript que muestra el contenido de un archivo llamado holamundo.txt que se encuentra en el servidor. La clave del código anterior es que la petición HTTP y la descarga de los contenidos del archivo se realizan sin necesidad de recargar la página. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 47 LA PRIMERA APLICACIÓN CON AJAX EJEMPLO
  • 48. La aplicación AJAX del ejemplo anterior se compone de cuatro grandes bloques: 1. instanciar el objeto XMLHttpRequest, 2. preparar la función de respuesta, 3. realizar la petición al servidor y 4. ejecutar la función de respuesta. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 48 LA PRIMERA APLICACIÓN CON AJAX
  • 49.  Todas las aplicaciones realizadas con técnicas de AJAX deben instanciar en primer lugar el objeto XMLHttpRequest, que es el objeto clave que permite realizar comunicaciones con el servidor en segundo plano, sin necesidad de recargar las páginas.  La implementación del objeto XMLHttpRequest depende de cada navegador, por lo que es necesario emplear una discriminación sencilla en función del navegador en el que se está. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 49 instanciar el objeto XMLHttpRequest
  • 50.  Una vez obtenida la instancia del objeto XMLHttpRequest, se prepara la función que se encarga de procesar la respuesta del servidor.  La propiedad onreadystatechange del objeto XMLHttpRequest permite indicar esta función directamente incluyendo su código mediante una función anónima o indicando una referencia a una función independiente. En el ejemplo anterior se indica directamente el nombre de la función: peticion_http.onreadystatechange = muestraContenido;  El código anterior indica que cuando la aplicación reciba la respuesta del servidor, se debe ejecutar la función muestraContenido(). Como es habitual, la referencia a la función se indica mediante su nombre sin paréntesis, ya que de otro modo se estaría ejecutando la función y almacenando el valor devuelto en la propiedad onreadystatechange. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 50 PREPARAR LA FUNCIÓN DE RESPUESTA
  • 51.  Después de preparar la aplicación para la respuesta del servidor, se realiza la petición HTTP al servidor.  Las instrucciones realizan el tipo de petición más sencillo que se puede enviar al servidor. En concreto, se trata de una petición de tipo GET simple que no envía ningún parámetro al servidor.  La petición HTTP se crea mediante el método open(), en el que se incluye : el tipo de petición (GET), la URL solicitada y un tercer parámetro que vale true.  Una vez creada la petición HTTP, se envía al servidor mediante el método send().  Este método incluye un parámetro que en el ejemplo anterior vale null. Más adelante se ven en detalle todos los métodos y propiedades que permiten hacer las peticiones al servidor. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 51 REALIZAR LA PETICIÓN AL SERVIDOR
  • 52.  Por último, cuando se recibe la respuesta del servidor, la aplicación ejecuta de forma automática la función establecida anteriormente.  La función muestraContenido() comprueba en primer lugar que se ha recibido la respuesta del servidor (mediante el valor de la propiedad readyState).  Si se ha recibido alguna respuesta, se comprueba que sea válida y correcta (comprobando si el código de estado HTTP devuelto es igual a 200).  Una vez realizadas las comprobaciones, simplemente se muestra por pantalla el contenido de la respuesta del servidor (en este caso, el contenido del archivo solicitado) mediante la propiedad responseText. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 52 EJECUTAR LA FUNCIÓN DE RESPUESTA
  • 53.  En primer lugar, se definen unas variables que se utilizan en la función que procesa la respuesta del servidor: var READY_STATE_UNINITIALIZED = 0; var READY_STATE_LOADING = 1; var READY_STATE_LOADED = 2; var READY_STATE_INTERACTIVE = 3; var READY_STATE_COMPLETE = 4;  La respuesta del servidor sólo puede corresponder a alguno de los cinco estados definidos por las variables anteriores. De esta forma, el código puede utilizar el nombre de cada estado en vez de su valor numérico, por lo que se facilita la lectura y el mantenimiento de las aplicaciones. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 53 MEJORANDO EL CÓDIGO EJEMPLO EJ con boton EJ sin AJAX EJ sin Alert
  • 54.  Se crea una función genérica de carga de contenidos mediante AJAX: function cargaContenido(url, metodo, funcion) { …  La función definida admite tres parámetros: la URL del contenido que se va a cargar, el método utilizado para realizar la petición HTTP y una referencia a la función que procesa la respuesta del servidor.  En primer lugar, la función cargaContenido() inicializa el objeto XMLHttpRequest (llamado xhr de forma abreviada). Una vez inicializado, se emplea el objeto peticion_http para establecer la función que procesa la respuesta del servidor.  Por último, la función cargaContenido() realiza la petición al servidor empleando la URL y el método HTTP indicados como parámetros. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 54 MEJORANDO EL CÓDIGO
  • 55.  La función inicializa_xhr() se emplea para encapsular la creación del objeto XMLHttpRequest  La función muestraContenido() también se refactoriza para emplear las variables globales definidas  Por último, la función descargaArchivo() simplemente realiza una llamada a la función cargaContenido() con los parámetros adecuados: cargaContenido("http://localhost:8080/ajax/holamundo.txt", "GET", muestraContenido); 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 55 MEJORANDO EL CÓDIGO
  • 56.  Al cargar la página, el cuadro de texto debe mostrar por defecto la URL de la propia página.  Al pulsar el botón "Mostrar Contenidos", se debe descargar mediante peticiones AJAX el contenido correspondiente a la URL introducida por el usuario. El contenido de la respuesta recibida del servidor se debe mostrar en la zona de "Contenidos del archivo".  En la zona "Estados de la petición" se debe mostrar en todo momento el estado en el que se encuentra la petición (No inicializada, cargando, completada, etc.)  Mostrar el contenido de todas las cabeceras de la respuesta del servidor en la zona "Cabeceras HTTP de la respuesta del servidor".  Mostrar el código y texto de estado de la respuesta del servidor en la zona "Código de estado". 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 56 EJEMPLO 2 EJEMPLO
  • 57.  Funcionamiento  Al clickear en cualquiera de los botones, se llamará, mediante el evento onclick, a la función traerDatos() de JavaScript.  Esta función se encargará de identificar que botón fue el presionado (mediante un parámetro que se le envía a la función) y abrirá una conexión XMLHttpRequest al archivo del servidor para solicitar la información pertinente.  El servidor enviará la respuesta en texto plano (sin ningún tipo de formato) y el cliente, al recibirla, la colocará con la propiedad innerHTML en el div instanciado para este fin. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 57 EJEMPLO 3 EJEMPLO
  • 58. 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 58 MÉTODOS Y PROPIEDADES DEL OBJETO XMLHTTPREQUEST  readyState: valor numérico (entero) que almacena el estado de la petición  responseText : El contenido de la respuesta del servidor en forma de cadena de texto  responseXML: El contenido de la respuesta del servidor en formato XML. El objeto devuelto se puede procesar como un objeto DOM  Status: El código de estado HTTP devuelto por el servidor (200 para una respuesta correcta, 404 para "No encontrado", 500 para un error de servidor, etc.)  statusText: El código de estado HTTP devuelto por el servidor en forma de cadena de texto: "OK", "Not Found", "Internal Server Error", etc.
  • 59.  0 No inicializado (objeto creado, pero no se ha invocado el método open)  1 Cargando (objeto creado, pero no se ha invocado el método send)  2 Cargado (se ha invocado el método send, pero el servidor aún no ha respondido)  3 Interactivo (se han recibido algunos datos, aunque no se puede emplear la propiedad responseText)  4 Completo (se han recibido todos los datos de la respuesta del servidor) 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 59 PROPIEDAD READYSTATE
  • 60.  abort() : Detiene la petición actual.  getAllResponseHeaders(): Devuelve una cadena de texto con todas las cabeceras de la respuesta del servidor.  getResponseHeader("cabecera"): Devuelve una cadena de texto con el contenido de la cabecera solicitada.  Onreadystatechange: Responsable de manejar los eventos que se producen. Se invoca cada vez que se produce un cambio en el estado de la petición HTTP. Normalmente es una referencia a una función JavaScript.  open("metodo", "url"): Establece los parámetros de la petición que se realiza al servidor. Los parámetros necesarios son el método HTTP empleado y la URL destino (puede indicarse de forma absoluta o relativa) 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 60 MÉTODOS DISPONIBLES PARA EL OBJETO XMLHTTPREQUEST
  • 61.  send(contenido): Realiza la petición HTTP al servidor.  setRequestHeader("cabecera", "valor"): Permite establecer cabeceras personalizadas en la petición HTTP. Se debe invocar el método open() antes que setRequestHeader().  El método open() requiere dos parámetros (método HTTP y URL) y acepta de forma opcional otros tres parámetros. Definición formal del método open(): open(string metodo, string URL [,boolean asincrono, string usuario, string password]); 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 61 MÉTODOS DISPONIBLES PARA EL OBJETO XMLHTTPREQUEST
  • 62.  http://www.librosweb.es/ajax 26/05-02/06/2014 FCT UNC@ - Ing. HEstigarribia 62 FUENTE