Historia y Conceptos Bsicos de AJAX Conceptos de AJAX Definicin Es una tcnica de desarrollo Web para crear aplicaciones interactivas. stas se ejecutan en el cliente (en el navegador del usuario) y mantiene comunicacin asncrona con el servidor en segundo plano. De esta forma es posible realizar cambios sobre la misma pgina sin necesidad de recargarla. Su objetivo es aumentar la interactividad, aumentar la velocidad y minimizar el trfico entre el cliente y el servidor. Que no es AJAX? No es un leguaje de programacin como J2EE, .NET, PHP, Ruby o Scripts CGI. Sino que interacta con todos ellos. Es por ello que para poder utilizar AJAX no es necesario aprender un nuevo lenguaje de programacin. Tampoco es servidor, no es un archivo, no es un programa, ni un modulo de Apache. Angel Sergio Aberbach Inicio Comunicacin Clase 1 https://alumni.educacionit.com/clases/indice/id/310/classId/1156 1 de 16 28/10/2013 01:27 p.m. Que es AJAX? AJAX no es una tecnologa sino la unin de varias tecnologas. Es la conjuncin de tres tecnologas: JavaScript XML El objeto XMLHttpRequest En otras palabras, AJAX es la aproximacin del lado del cliente y que puede interactuar con cualquiera de las aplicaciones Web del lado del Servidor. Quin Invent AJAX? El origen exacto esta sujeto a debate. Sin embargo Jesse James Garrett de Adaptive Path fue el primero en acuar el termino en febrero del 2005. En su articulo Ajax: A New approach to Web applications Garrett discute como el espacio entre clientes importantes, aplicaciones y clientes pequeos o aplicaciones y la red se estn cerrando. Por su puesto Google da realmente tcnicas de un elevado perfil (Gmail, Goole Maps, Google Labs, etc). Pero Garrett nos da un termino que no es exactamente eso. Es decir es verbal, como asincrnico, XMLHTTPRequest, JavaScript, CSS, el DOM, etc. Entonces originalmente es considerado como un acrnico para el asincronismo JavaScript + XML, el termino ahora es usado simplemente para explicar todas las tecnologas que permiten al browser comunicarse con el servidor sin refrescar la pagina. Alternativas previas a la existencia de AJAX JavaScript Remote Scripting (JSRS): Un cliente JavaScript ejecuta procesos en background escondiendo elementos, iframes, etc. Introducido en 1996 por Internet Explorer y en 1997 por Netscape. Tenan el elemento SRC (source) que poda tomar cualquier direccin URL externa y cargarlo en una pagina que contenga JavaScript que manipule la pagina paterna, pueden lograrse efectos parecidos al AJAX. MSRS - Microsoft Remote Scripting: Resulto un sustituto ms elegante para estas tcnicas, con envo de datos. Introducido por Microsoft en 1998. Clase 1 https://alumni.educacionit.com/clases/indice/id/310/classId/1156 2 de 16 28/10/2013 01:27 p.m. Caractersticas Ventajas Utiliza tecnologas ya existentes. Soportada por la mayora de los navegadores modernos. Interactividad. El usuario no tiene que esperar hasta que lleguen los datos del servidor. Portabilidad (no requiere plug-in como Flash y Applet de Java) Mayor velocidad, esto debido que no hay que retornar toda la pgina nuevamente. La pgina se asemeja a una aplicacin de escritorio. Desventajas Se pierde el concepto de volver a la pgina anterior. Si se guarda en favoritos no necesariamente al visitar nuevamente el sitio se ubique donde nos encontrbamos al grabarla. La existencia de pginas con AJAX y otras sin esta tecnologa hace que el usuario se desoriente. Problemas con navegadores antiguos que no implementan esta tecnologa. No funciona si el usuario tiene desactivado el JavaScript en su navegador. Requiere programadores que conozcan todas las tecnologas que intervienen en AJAX. Dependiendo de la carga del servidor podemos experimentar tiempos tardos de respuesta que desconciertan al visitante. Links de inters Nombre Descripcin URL AjaxPatterns Sitio Web www.ajaxpatterns.org Ajax Projects Projects www.ajaxprojects.com/ Ajax Path Ajax and PHP www.ajaxpath.com Ajax World Grupos Google sobre Ajax groups-beta.google.com/group/ajax-world jQuery jQuery Fundation https://jquery.org/
Clase 1 https://alumni.educacionit.com/clases/indice/id/310/classId/1156 3 de 16 28/10/2013 01:27 p.m. Introduccin a Javascript Introduccin Conceptos Bsicos Se trata de un lenguaje de tipo script compacto, basado en objetos y guiado por eventos. JavaScript es un lenguaje interpretado, es decir, que no requiere compilacin, utilizado principalmente en pginas Web, con unasintaxis semejante a la del lenguaje Java y el lenguaje C. JavaScript es case sensitive, o lo que es lo mismo, diferencia maysculas y minsculas. Dnde y cmo incluir Javascript Existen distintos modos de incluir lenguaje JavaScript en una pgina. La forma mas frecuente de hacerlo es utilizando la directiva <script> en un documento HTML (se pueden incluir tantas directivas <script> como se quiera en un documento). El formato es el siguiente: <script language="Javascript 1.3"> El atributo lenguaje hace referencia a la versin de JavaScript que se va a utilizar en dicho script. Otro atributo de la directiva script es src, que puede usarse para incluir un archivo externo que contiene JavaScript y que quiere incluirse en el cdigo HTML. <script language="JavaScript" src ="archivo.js"> </script>
El archivo externo simplemente es un archivo del texto que contiene cdigo JavaScript, y cuyo nombre acaba con la extensin js. Puede incluirse tambin cdigo JavaScript como respuesta a algn evento: <input type="submit" onclick="alert('Acabas de hacer click');return false;" value="Click"> Nota: Los scripts pueden incluirse como comentarios para asegurar que su cdigo no es "visto" por navegadores viejos que no reconocen JavaScript y as evitar errores.
Variables Introduccin Las variables almacenan y recuperan datos, tambin conocidos como "valores". Una variable puede referirse a un valor que cambia o se cambia. Las variables son referenciadas por su nombre, y el nombre que les es asignado debe ser conforme a ciertas reglas (debe empezar con una letra o Clase 1 https://alumni.educacionit.com/clases/indice/id/310/classId/1156 4 de 16 28/10/2013 01:27 p.m. ("_"); los caracteres siguientes pueden ser nmeros (0-9), letras maysculas o letras minsculas). Variables globales Normalmente, usted crea una nueva variable global asignndole simplemente un valor: globalVariable=5; Sin embargo, si usted est codificando dentro de una funcin y usted quiere crear una variable local que slo tenga alcance dentro de esa funcin, debe declarar la nueva variable haciendo uso de var: function newFunction() { var localVariable=1; globalVariable=0; ... } Tipos de datos Javascript reconoce seis tipos de valores diferentes: numricos, lgicos, objetos, cadenas, nulos e indefinidos. JavaScript tiene la peculiaridad de ser un lenguaje dbilmente tipado, esto es, una variable puede cambiar de tipo durante su vida, por ejemplo uno puede declarar una variable que ahora sea un entero y ms adelante una cadena. A diferencia de otros lenguajes y como ya hemos visto, en Javascript no es necesario declarar las variables especificando el tipo de dato que contendrn, ser el propio intrprete el que le asignar el tipo apropiado. Tipos de Datos: Nmeros Enteros o coma flotante. Boleanos True o False. Cadenas Los tipos de datos cadena deben ir delimitados por comillas simples o dobles. Objetos Obj = new Object(); Nulos Null Indefinidos Un valor indefinido es el que corresponde a una variable que ha sido creada pero no le ha sido asignado un valor. Clase 1 https://alumni.educacionit.com/clases/indice/id/310/classId/1156 5 de 16 28/10/2013 01:27 p.m.
Operadores Operadores de comparacin Un operador de la comparacin compara sus operando y devuelve un valor lgico basado en si la comparacin es verdad o no. Los operando pueden ser numricos o cadenas. Op. Descripcin == " Igual a" devuelve true si los operandos son iguales === Estrictamente "igual a" (JavaScript 1.3) != " No igual a" devuelve true si los operandos no son iguales !== Estrictamente " No igual a" (JavaScript 1.3) > " Mayor que" devuelve true si el operador de la izquierda es mayor que el de la derecha. >= " Mayor o igual que " devuelve true si el operador de la izquierda es mayor o igual que el de la derecha. < " Menor que" devuelve true si el operador de la izquierda es menor que el de la derecha. <= "Menor o igual que" devuelve true si el operador de la izquierda es menor o igual que el de la derecha. Operadores Lgicos Los operadores Lgicos se utilizan para combinar mltiples comparaciones en una expresin condicional. Un operador lgico toma dos operandos cada uno de los cuales es un valor true o false y devuelve un valor true o false. Operador Descripcin Clase 1 https://alumni.educacionit.com/clases/indice/id/310/classId/1156 6 de 16 28/10/2013 01:27 p.m. && " Y " Devuelve true si ambos operadores son true. || " O " Devuelve true si uno de los operadores es true. ! "No" Devuelve true si la negacin del operando es true. Operadores especiales Operador Descripcin (condicin) ? trueVal : falseVal Asigna un valor especificado a una variable si la condicin es true, por otra parte asigna un valor alternativo si la condicin es false. New El operador new crea una instancia de un objeto. This La palabra clave 'this' se refiere al objeto actual. , El operador ',' evala los dos operados. Delete El operador delete borra un objeto, una propiedad de un objeto, o un elemento especificado de un vector. Void El operador Void especifica una expresin que ser evaluada sin devolver ningn valor. Typeof Devuelve el tipo de dato de un operando.
Estructura de Control Bucle For Primero inicializa la variable. Clase 1 https://alumni.educacionit.com/clases/indice/id/310/classId/1156 7 de 16 28/10/2013 01:27 p.m. Despus si la condicin de repeticin es verdadera se ejecuta. Y por ultimo despus se evala expresin de modificacin, la cual suele variar el valor de la variable inicializada al comienzo. Se repite el bucle verificacin de condicin de repeticin, hasta que la condicin de repeticin sea falsa for (i=0; i<=10; i++) { sentencias... } Bucle While Mientras la condicin sea cierta se ejecutan las sentencias. while (condicin) { sentencias } Bucle do While Se ejecuta siempre la primera vez las sentencias Luego se vuelven a ejecutar una o ms veces segn la condicin sea cierta o no. do { sentencias } while (condicin);
Objetos del Navegador Jerarquas En este punto comienza la descripcin de las propiedades y los mtodos de los objetos del navegador. Entre los objetos del navegador se encuentra una jerarqua que representan, una relacin "contenedor - contenido". De forma esquemtica, podemos representar la jerarqua de esta manera (al lado est la directiva HTML con que se incluyen en el documento objetos de este tipo, cuando exista esta directiva): * window + history + location + document <BODY> ... </BODY> - anchor <A NAME="..."> ... </A> Clase 1 https://alumni.educacionit.com/clases/indice/id/310/classId/1156 8 de 16 28/10/2013 01:27 p.m. - applet <APPLET> ... </APPLET> - area <MAP> ... </MAP> - form <FORM> ... </FORM> + button <INPUT TYPE="button"> + checkbox <INPUT TYPE="checkbox"> + fileUpload <INPUT TYPE="file"> + hidden <INPUT TYPE="hidden"> + password <INPUT TYPE="password"> + radio <INPUT TYPE="radio"> + reset <INPUT TYPE="reset"> + select <SELECT> ... </SELECT> - options <INPUT TYPE="option"> + submit <INPUT TYPE="submit"> + text <INPUT TYPE="text"> + textarea <TEXTAREA> ... </TEXTAREA> - image <IMG SRC="..."> - link <A HREF="..."> ... </A> - plugin <EMBED SRC="..."> + frame <FRAME> * navigator Segn esta jerarqua, podemos entender el objeto rea (por ejemplo) como un objeto dentro del objeto document que a su vez est dentro del objeto window. La notacin '.' se utiliza para denotar a un objeto contenido dentro de otro. Por ejemplo: ventana.documento.formulario.caja_de_texto En la mayora de los casos podemos ignorar la referencia a la ventana actual (window), pero ser necesaria esta referencia cuando estemos utilizando mltiples ventanas, o cuando usemos frames. Cuando estemos usando un nico frame, podemos pues ignorar. Explcitamente la referencia al objeto window, ya que JS asumir que la referencia es de la ventana actual. Tambin podemos utilizar la notacin de array para referirnos a algn objeto, por ejemplo, cuando los objetos a usar no tienen nombre, como en este caso: document.forms[0].elements[1];
AJAX Fundamentos Clase 1 https://alumni.educacionit.com/clases/indice/id/310/classId/1156 9 de 16 28/10/2013 01:27 p.m. Utilizando el Objeto XMLHttpRequest Objeto XMLHttpRequest El objeto XMLHttpRequest es un elemento fundamental para la comunicacin asincrnica con el servidor. Este objeto nos permite enviar y recibir informacin en formato XML y en general en cualquier formato. Primero se debe crear el objeto utilizando la sentencia new para instanciar objetos en JavaScript. Crear el Objeto Para la creacin de un objeto de la clase nativa XMLHttpRequest, se debe tener en cuenta el navegador. Internet Explorer implementa XMLHttpRequest como un objeto Activex. Firefox, Safari y Opera implementan este objeto en forma nativa desde JavaScript. En el siguiente ejemplo vemos cmo implementaremos el objeto XMLHttpRequest haciendo transparente el proceso en cuanto a navegador donde se est ejecutando: // Retorna el objeto para browsers Mozilla/Safari if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } // Retorna el objeto para browsers IE else if (window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } La llamada a window.ActiveXObject puede retornar un objeto o null Si la llamada a window.XMLHttpRequest falla entonces el navegador no estar disponible para utilizar AJAX. Si window.XMLHttpRequest existe entonces se crear una instancia de XMLHttpRequest. Propiedades de XHR Mtodo Descripcin abort() Detiene el requerimiento getAllResponseHeaders() Devuelve todas las respuestas getResponseHeader(header) Devuelve un valor string con las respuesta especificada en el header open(metodo, url) Este mtodo configura la llamada al Servidor. El Clase 1 https://alumni.educacionit.com/clases/indice/id/310/classId/1156 10 de 16 28/10/2013 01:27 p.m. parmetro mtodo es el modo en que se invoca el requerimiento (GET o POST) y el parmetro url es la direccin al servidor. Existe un tercer parmetro que es un valor booleano y especifica el modo de la llamada, por defecto es TRUE que significa asincrnico. send(contenido) Este mtodo ejecuta la llamada al servidor. Si el requerimiento fue declarado asincrnico, este mtodo retorna inmediatamente, de otra manera, espera hasta recibir la respuesta setRequestHeader(header, value) Configura el header especificado para el valor provisto. El mtodo open() debe ser ejecutado anteriormente Las propiedades principales del objeto XMLHttpRequest son: onreadystatechange: Almacena el nombre de la funcin que se ejecutar cuando el objeto XMLHttpRequest cambie de estado. readyState: Almacena el estado del requerimiento hecho al servidor, pudiendo ser: 0 No inicializado (el mtodo open no a sido llamado) 1 Cargando (se llam al mtodo open) 2 Cargado (se llam al mtodo send y ya tenemos la cabecera de la peticin HTTP y el status) 3 Interactivo (la propiedad responseText tiene datos parciales) 4 Completado (la propiedad responseText tiene todos los datos pedidos al servidor) responseText: Almacena el string devuelto por el servidor, luego de haber hecho una peticin. responseXML: Similar a la anterior (responseText) con la diferencia que el string devuelto por el servidor se encuentra en formato XML. Mtodos de XHR Propiedades Descripcin onreadystatechange Esta propiedad recibe la llamada a una funcin en JavaScript la cual se dispara en cada cambio de estado. readyState El estado del requerimiento. Los cinco posibles valores son: 0= no inicializado (uninitialized), 1= cargando (loading), 2= cargado (loaded), 3= interactivo (interactive) y 4 = completo (complete) Clase 1 https://alumni.educacionit.com/clases/indice/id/310/classId/1156 11 de 16 28/10/2013 01:27 p.m. responseText La respuesta desde el servidor como texto responseXML La respuesta del servidor como XML. Este objeto puede ser parseado y examinado como un objeto DOM status El HTTP status code del el servidor. Este puede ser 200= OK, 404 no se encontr (not found), etc statusText La versin texto del HTTP status code (OK, Not Found, etc) Los mtodos principales del objeto XMLHttpRequest son: open: Abre un requerimiento HTTP al servidor. send: Enva el requerimiento al servidor.
Interaccin Diagrama del circuito AJAX Clase 1 https://alumni.educacionit.com/clases/indice/id/310/classId/1156 12 de 16 28/10/2013 01:27 p.m. El cliente dispara el evento AJAX. Una instancia del objeto XMLHttpRequest es creada. Usando el mtodo Open() se configura la llamada al servidor. Aclaracin: En el siguiente ejemplo se utiliza el mtodo Open especificando solo los primeros 2 parmetros. El tercer parmetro de tipo Boolean, hace referencia al modo en el que se ejecuta el mtodo, Sincrnico o Asincrnico. Si no lo especificamos por defecto toma el valor en TRUE que significa Asincrnico. Luego ms abajo en este mismo captulo aclaramos la diferencia entre uno y otro. var xmlHttp; function validateEmail(){ // Retorna el objeto para browsers Mozilla/Safari if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } // Retorna el objeto para browsers IE else if (window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); Clase 1 https://alumni.educacionit.com/clases/indice/id/310/classId/1156 13 de 16 28/10/2013 01:27 p.m. } var email = document.getElementById("email"); var url = "validate.php?email=" + escape(email.value);
xmlHttp.open("GET", url); xmlHttp.onreadystatechange = callback; xmlHttp.send(null); } El requerimiento es tomado por el servidor. Este ltimo debe llamar a un servlet o un script CGI o cualquier tecnologa que se ejecute del lado de servidor. El servidor puede hacer cualquier cosa que se desee incluyendo acceso a datos o a otro sistema. El requerimiento es devuelto al navegador La propiedad onreadystatechange obtiene el puntero a una funcin JavaScript (en este ejemplo a la funcin callback()). Esta es llamada cada vez que cambia el estado interno del objeto XMLHttpRequest. El objeto XMLHttpRequest llama la funcin callback(). Esta funcin chequea el estado a travs de la propiedad readyState function callback() { if (xmlHttp.readyState == 4) { if (xmlHttp.status == 200) { alert(xmlHttp.responseText); } } } Sincronismo en AJAX Donde se especifica? Es en el mtodo Open el tercer parmetro. El mismo es un parmetro Boolean. True: significa Asincrnica y false: Sincrnica. Que significa Asincrnico? En la definicin de las siglas A.J.A.X. encontramos que la primer letra A significa Asynchronous el resto de las letras referencian a Javascript and XML. Pero a que se refiere exactamente con Asincrnico? La definicin de Asincrona hace referencia al suceso que no tiene lugar en total correspondencia temporal con otro suceso. En otras palabras significa Clase 1 https://alumni.educacionit.com/clases/indice/id/310/classId/1156 14 de 16 28/10/2013 01:27 p.m. que una vez solicitada la peticin AJAX, osea cuando se ejecuta el mtodo Send(), el programa no se detendr a esperar recibir la respuesta que vendr del servidor sino que contina su ejecucin y la respuesta puede ejecutarse en paralelo en cualquier momento. La principal ventaja que una peticin AJAX pueda ser asincrnica, es el efecto de total indiferencia que genera en el usuario final ya que jams se entera de las comunicaciones que realiza la pgina con el servidor mientras navega por el sitio. Ya que en ningn momento este debe esperar a que termine de cargar una peticin AJAX mientras opera con la pgina. En conclusin, las comunicaciones XHR se pueden realizar en paralelo y lograr que sean totalmente transparentes ante el usuario final. Un ejemplo tpico donde podemos observar el asincronismo, son aquellas pginas donde creamos una cuenta de usuario y en el mismo formulario de carga de datos, nos puede alertar el sitio que el username que elegimos ya esta ocupado por otro usuario. Este mensaje de alerta puede aparecer en cualquier mientras estamos cargando otros campos del mismo formulario de registracin. Esto demuestra que el usuario no se debe detener a esperar que la peticin AJAX compruebe si el username esta disponible o no, sino que el usuario continua con la carga de datos para la inscripcin. Que significa Sincrnico? Es justamente lo opuesto a lo explicado en el ejemplo anterior. En este caso la ejecucin de la pgina (el javascript) se queda esperando que llegue la respuesta del servidor. Esta opcin se utiliza para casos muy particulares. Generalmente siempre se utiliza la opcin de asincrnico, es por eso que en el mtodo Open del objeto XHR si no especificamos por defecto la peticin AJAX se ejecuta de manera Asincrnica. <script> // Creamos la variable parametro parametro = Datos pasados por POST; oXML = AJAXCrearObjeto(); // Preparamos la peticin con parametros oXML.open(GET,'pagina.php, false); // Realizamos la peticin oXML.send(null); // Devolvemos el resultado alert( oXML.responseTex )t; </script> Como vemos, toda la parte dedicada a comprobar el estado en el que se encuentra la comunicacin, ya no es necesaria, puesto que ahora se trata de una llamada sncrona, de modo que hasta que no se reciban los datos del servidor no se va a continuar con la ejecucin. Con la eliminacin de ese fragmento de codigo se consigue que las llamadas sncronas funcionen correctamente. - Top Clase 1 https://alumni.educacionit.com/clases/indice/id/310/classId/1156 15 de 16 28/10/2013 01:27 p.m.
EducacionIT Me gusta A 18 934 personas les gusta EducacionIT. Plug-in social de Facebook Comentario sobre Contenido de la Clase