A la hora de buscar información sobre desarrollo web nos encontramos multitud de documentos que hablan de la nueva web (web 2.0) y de como ha contribuido a su desarrollo las técnicas que componen AJAX.
Concepto AJAX
AJAX (Asynchronous Javascript and XML) es una técnica de desarrollo web que genera aplicaciones web interactivas combinando: ●XHTML y CSS para la presentación de información ●Document Object Model (DOM) para visualizar dinámicamente e interactuar con la información presentada ●XML, XSLT para intercambiar y manipular datos ●JSON y JSON-RPC pueden ser alternativas a XML/XSLT ● XMLHttpRequest para recuperar datos asíncronamente ●Javascript como nexo de unión de todas estas tecnologías AJAX es un patrón de diseño que propone un nuevo modelo de interacción Web combinando las tecnologías anteriores Los navegadores que soportan las tecnologías mencionadas son las plataformas en las que se ejecutan las aplicaciones AJAX (Firefox, Iexplorer, Opera, Konqueror y Safari) Ya hemos estudiado alguna de estás técnicas(XHTML y CSS) pero de todas las que componen AJAX, la más importante es JavaScript, pues viene a ser el pegamento que permite interactuar con todas estas técnicas dentro de una página html. De forma que podamos recorrer la información contenida en un documento xml e ir generando una tabla xhtml. O comprobar, que los datos introducidos en la página web por parte del cliente, son correctos sin la necesidad de enviarlos a un servidor donde un programa java o de otro tipo analice dichos datos. Es más si no conocemos suficientemente JavaScript no seremos capaces de crear aplicaciones dinámica por mucho que dominemos el resto de las técnicas. Indice de Contenidos: •Introducción •¿Qué
es Javascript? •Primeros pasos •Elementos básicos •Comentarios •Literales •Sentencias y bloques •Tipos de datos •Variables •Referencias •Vectores y matrices •Operadores •Operadores aritméticos •Operadores de comparación •Operadores lógicos •Operadores de asignación •Operadores especiales •Estructuras de control •Bifurcaciones condicionales •Bucles •Estructuras de manejo de objetos 1
•Funciones •Funciones
predefinidas
•Objetos •Propiedades
y métodos •Creación mediante constructores •Herencia •Prototipado •Objetos predefinidos •Objeto Array •Objeto Date •Objeto Math •Objeto Number •Objeto String •Objeto RegExp •Objeto Boolean •Objeto Function •Eventos •Lista de eventos •Definición mediante código •Modelo de objetos del documento •Objeto Window •La barra de estado •Marcos (o frames) •Objeto Document •Cómo escribir en el documento •Cookies •Funciones básicas •Un ejemplo: el contador individualizado •Objeto Image •Tratamiento de imágenes •Objeto Form •Objetos Text •Objetos Checkbox y Radio •Objetos Select y Option •Expresiones regulares •Objeto RegExp •Métodos de String •Otros objetos •Objeto History •Objeto Location •Objeto Navigator •Objeto Screen •Nuevas características •Ficheros .js •Introducción •¿Qué es Javascript? El código JavaScript debe estar incluido dentro de una página HTML(XHTML). Precisamente la función de JavaScript esta en leer , y modifcar los contenidos de las etquetas HTML. Esto es lo que permite que las páginas html sean dinámcas. También se ha de destacar que javascript es un lenguaje de programación interpretado. •Primeros
pasos Para incluiir código JavaScript dentro de la página untilizamos las etiquetas 2
<SCRIPT LANGUAGE="JavaScript"> Ejemplo: <SCRIPT LANGUAGE="JavaScript"> function HolaMundo() { alert("¡Hola, mundo!"); var contestacion = prompt("¿Cómo te llamas, criatura?", ""); if (contestacion) alert("Hola, " + contestacion); } function CambiaColor() { document.bgColor='d0d0a9' }
Viendo el código anterior vemos como JavaScript hace que una página sea dinámica. Otra de las características de este lenguaje esta en que es interpretado. También destaca que las herramientas gráficas como Dreamweaver generan automáticamente el código JavaScript dentro de sus diseños. Por lo tanto se hace imprescindible conocer este lenguaje si queremos ser capaces de leer y entender el código generado por estas herramientas de diseño web. •Elementos
básicos Antes de comenzar a escribir código tenemos que destacar que JAVASCRIPT distigue mayúsculas de minúsculas, por lo tanto habrá que tener cuidado a la hora de nombrar las variables y funciones, ya que en el caso de las variables no es obligatorio definirlas para utilizarlas. •Comentarios Los comentarios se crean igual que en Java // para una sola línea de comentarios /* para varias líneas*/ •Literales
Se llama así a los valores que puede tomar una variable o una constante. Aparte de los distintos tipos de números y valores booleanos: "Soy una cadena" 3434 3.43 true, false •Código JavaScript contenido en ficheros externos(.js) El código que necesitemos crear para una página html lo podemos incluir en la 3
propia página dentro de las etiquetas <script language=”JavaScript”> o bien incluir un fichero asccii con las instrucciones JavaScript. Para incluir dichero fichero en la página html codificamos: <script language=”JavaScript” src=”fichero.js”> Desde este momento las variables y funciones definidas dentro del fichero fichero.js están disponibles. •Tipos
de datos
Variables Aunque no es obligado, se deben declarar las variables antes de utilizarlas. Esto se hace utilizando la palabra clave var . Ejemplos de declaración de variables: var man = "hola"; // El valor almacenado en man es de tipo cadena (string). var tres = 3; // El valor almacenado en tres es de tipo numerico. var verdad = true; // El valor almacenado en verdad es de tipo boleano (Boolean).var e = 2.718281828 // El valor almacenado en e es de tipo numerico. JavaScript es capaz de distinguir entre mayusculas y minusculas, y no solo es capaz de distinguirlas, sino que tratará como variables diferentes dato y Dato. El nombre de una variable no puede ser una palabra reservada, ni comenzar por un dígito numérico. Ejemplos de nombres de variable no validos: 5Dias // Comienza con un numero. Gaston&Daniela // El ampersand (&) no es un caracter valido para nombre de variable. Si declaramos una variable sin asignarla un valor, existe pero su valor es indefinido(undefined). Ej.: var que_sera; Como JavaScript es un lenguaje sin tipos, las variables técnicamente no tienen un tipo fijo. Tienen un tipo equivalente al tipo de valor que contienen. Es posible, en algunas circunstancias, forzar la conversión automática de una variable o una parte de datos en un tipo diferente. Los números pueden incluirse fácilmente en strings, pero los strings no se pueden incluir directamente en números, para eso existen funciones explicitas de conversión, parseInt() y parseFloat(), son las funciones encargadas de hacerlo.
String
Los strings están delimitados por dobles o simples comillas. (Se utilizan comillas simples para delimitar strings que contienen comillas dobles.) Un string también es un objeto en JavaScript, siendo este un caso especial, con propiedades especiales. Son ejemplos de strings, los siguientes: "Este es un string." '"¡Y este tambien!" pero con comillas simples.' "125"
4
JavaScript soporta números enteros y de punto flotante. Los enteros pueden ser positivos, 0, o negativos; un numero de punto flotante puede contener un punto decimal, una "e" (minúscula o mayúscula), que se utiliza para representar "diez elevado a " en notación cientíifica, o ambos. Los enteros se pueden representar en base 10 (decimal), base 8 (octal), y base 16 (hexadecimal). Los enteros octales se especifican por un "0" a la izquierda, y solo pueden contener los dígitos 0 a 7. Si un número tiene un "0" a la izquierda pero tiene los dígitos "8" y/o "9", es un número decimal. Un numero, que por el contrario, podría ser un número octal pero que contenga la letra "e" (o "E") genera un error. Enteros hexadecimales ("hex") se especifican comenzando por "0x" (la "X" puede ser mayúscula o minúscula) y puede contener dígitos 0 a 9 y letras de la A a F (también en minúsculas o mayúsculas). La letra "e" es un digito válido en notación hexadecimal y no significa un numero exponencial. Las letras A a F se utilizan para representar, como dígitos, los números que van desde el 10 al 15 en base 10. Es decir, 0xF es equivalente a 15, y 0x10 es equivalente a 16. Números octales y hexadecimales pueden ser negativos, pero no pueden ser fraccionarios. Un Numéricos número que comience con un "0" y contenga un punto decimal es numero decimal de coma flotante; si un número que comienza con "0x" o "00" contiene un punto decimal, se ignora todo lo que este situado a la derecha del punto decimal. Veamos algunos ejemplos de números: .0001, 0.0001, 1e-4, 1.0e-4 // Cuatro formas distintas de representar el mismo número de punto flotante. 8.23e2 // Número de punto flotante, equivalente a 823. 102 // Número entero. 0377 // Entero octal, equivalente a 255. 00.0001 // Como un número octal no puede tener parte decimal, equivale a 0. 0378 // Número entero, equivale a 378. 0Xff // Entero hexadecimal, equivale a 255. 0x37CF // Entero hexadecimal, equivale a 14287. 0x3e7 // Entero hexadecimal, equivale a 999. 0x3.45e2 // Como un número hexadecimal no puede tener parte decimal, equivale a 3. Boleanos
Los valores boleanos posibles son true (verdad) y false (falso). Son valores especiales, y no se pueden utilizar como 1 y 0.
Objetos
Los objetos son construcciones lógicas que tienen unas propiedades y pueden ejecutar determinados métodos. Se usa la notación del punto: - objeto.propiedad, es una referencia a la propiedad citada - objeto.metodo, invoca el método en cuestión y se ejecuta Por ej. el objeto window, tiene la propiedad window.location, que contiene la dirección de la página y el método window.resizeTo(x,y), que dimensiona la ventana al tamaño x*y pixels.
Indefinido
Un valor que es indefinido es simplemente un valor dado a una variable despues de haber sido creada, pero antes de que se haya asignado un valor a esta.
Null
Un valor null es algo que no tiene valor y no quiere decir nada.
•Vectores
y matrices 5
En los lenguajes de programación existen estructuras de datos especiales que nos sirven para guardar información más compleja que simples variables. Una estructura típica en todos los lenguajes es el Array, que es como una variable donde podemos introducir varios valores, en lugar de solamente uno como ocurre con la variables normales. Los arrays nos permiten guardar varias variables y acceder a ellas de manera independiente, es como tener una variable con distintos compartimentos donde podemos introducir datos distintos. Para ello utilizamos un índice que nos permite especificar el compartimiento o posición a la que nos estamos refiriendo. Los arrays se introdujeron en versiones Javascript 1.1 o superiores, es decir, solo los podemos utilizar a partir de los navegadores 3.0. Para navegadores antiguos se puede simular el array utilizando sintaxis de programación orientada a objetos, pero dada la complejidad de esta tarea, por lo menos en el momento en que nos encontramos y las pocas ocasiones que los deberemos utilizar vamos a ver cómo utilizar el auténtico array de Javascript. Creación de Arrays El primer paso para utilizar un array es crearlo. Para ello utilizamos un objeto Javascript ya implementado en el navegador.Para crear un objeto array: var miArray = new Array() Esto crea un array en la página que esta ejecutándose. El array se crea sin ningún contenido, es decir, no tendrá ningún elemento creado. También podemos crear el array especificando el número de elementos que va a tener. var
miArray
miArray[0] miArray[1] miArray[2] = 127
=
new
= =
Array(10) 290 97
Los datos se introducen indicando entre corchetes el índice de la posición donde queríamos guardar el dato. Los arrays empiezan siempre en la posición 0, así que un array que tenga por ejemplo 10 posiciones, tendrá elementos del 0 a la 9. Para recoger datos de un array lo hacemos igual: poniendo entre corchetes el índice de la posición a la que queremos acceder. Veamos cómo se imprimiría en la pantalla el contenido de un array. var
miArray
miArray[0] miArray[1] miArray[2] for document.write("Posición
= = = =
new
Array(3) 155 4 499
(i=0;i<3;i++){ " + i + " del array: document.write("
")
"
+
miArray[i])
} Tipos de datos en los arrays En los arrays podemos guardar datos de cualquier tipo. Podemos ver un 6
array
donde
introducimos
datos
de
tipo
caracter.
miArray[0] = "Hola" miArray[1] = "a" miArray[2] = "todos" Incluso, en Javascript podemos guardar distintos tipos de datos en un mismo array. Es decir, podemos introducir números en unas casillas, textos en otras, boleanos o cualquier otra cosa que deseemos. miArray[0] miArray[1] miArray[1] miArray[2]
=
"desarrolloweb.com" 1275 0.78 true
= = =
Longitud de los arrays Para saber la longitud de un array se utiliza la propiedad length. document.write("Longitud
del
array:
"
+
for
(i=0;i<miArray.length;i++){ document.write(miArray[i])
miArray.length)
} Hay que fijarse que el bucle for se ejecuta siempre que i valga menos que la longitud del array, extraída de su propiedad length. El siguiente ejemplo nos servirá para conocer mejor los recorridos por los arrays, el funcionamiento de la propiedad length y la creación dinámica de nuevas posiciones. Vamos a crear un array con 2 posiciones y rellenar su valor. Posteriormente introduciremos un valor en la posición 5 del array. Finalmente imprimiremos todas las posiciones del array para ver lo que pasa. var
miArray
miArray[0] miArray[1]
=
new
= =
miArray[5] for document.write("Posición
"Estados =
Array(2) "Colombia" Unidos" "Brasil"
(i=0;i<miArray.length;i++){ " + i + " del array: document.write("
")
"
+
miArray[i])
} Arrays multidimensionales Los arrays multidimensionales son un estructuras de datos que almacenan los valores en más de una dimensión. En Javascript no existe un auténtico objeto array-multidimensinal. Para utilizar estas estructuras podremos definir arrays que donde en cada una de sus posiciones habrá otro array. En nuestros programas podremos utilizar arrays de cualquier dimensión, veremos a continuación cómo trabajar con arrays de dos 7
dimensiones,
que
serán
los
más
comunes.
En este ejemplo vamos a crear un array de dos dimensiones donde tendremos por un lado departamentos y por el otro los ciclos de cada departamento.
<script> var dpto = new Array(4); var infor= new Array(3); infor[0]="asi"; infor[1]="dai"; var adm = new Array(3); adm[0]="af"; adm[1]="ga"; adm[3]="sec"; var ef = new Array(3); ef[0]="afd"; dpto[0]=infor; dpto[1]=adm; dpto[2]=ef; for(i=0;i
Ciclo" + dpto[i][j])+""} } También podemos crear un array a la vez que le indicamos sus datos. var diasSemana = new Array("Lunes","Martes","Miércoles,","Jueves","Viernes","Sábado","Domingo") y también un array bidimiensional. var temperaturas_cuidades = new Array(new Array (12,10,11), new Array(5,0,2),new Array(10,8,10))
Operadores 8
Aritméticos Descripcion Negacion
Logicos
Simbolo
Descripcion
De Bit
Asignación
Simbolo
Descripcion
Simbolo ~
Asignacion Operadores compactos
-
NO Logico
!
NOT bit a bit
Incremento
++
Menor que
<
Desplazamiento izquierdo Bit a Bit
<<
Decremento
--
Mayor que
>
Desplazamiento derecho Bit a Bit
>>
>>>
Multiplicacion
*
Menor que o igual a
<=
Desplazamiento derecho sin signo
Division
/
Mayor que o igual a
>=
AND bit a bit
&
Modulo aritmetico
%
Igualdad
==
XOR bit a bit
^
Suma
+
Distinto
!=
OR bit a bit
|
Resta
-
Y Logico AND
&&
O Logico OR
||
Descripcion
Varios
Simbolo = += -= *= /=
Descripcion
Simbolo
delete
delete
typeof
typeof
void
Void
•Operadores
aritméticos de comparación •Operadores lógicos •Operadores de asignación •Operadores especiales •Estructuras de control •Bifurcaciones condicionales •Operadores
if (condicion_a_evaluar) {
; } else { ; } switch(variable) { case “valor1”: acciones ; break; case “valor2”: acciones ; break; default: sentencias; } •Bucles
for (valor inicialt; condición; incremento ;) { ; [brrak] 9
[continue] } while (condicion) { ; [break] [continue] } do { ; [break] [continue] } while (condicion) •Funciones
Incluso los programas más sencillos tienen la necesidad de dividirse. Las funciones son los únicos tipos de subprogramas que acepta JavaScript. Tienen la siguiente estructura: function nombre(argumento1, argumento2,..., argumento n) {código de la funcion} Los parámetros se pasan por valor. Eso significa que si cambiamos el valor de un argumento dentro de una función, este cambio no se verá fuera: function sumarUno(num) { num++; } var a = 1: sumarUno(a); En este ejemplo, a seguirá valiendo 1 después de llamar a la función. Esto tiene una excepción, que son las referencias. Para devolver un valor de retorno desde la función se utiliza la palabra reservada return: function cuadrado(num) { return num * num; } a = cuadrado(2); En este ejemplo, a valdrá 4. Se pueden definir funciones con un número variable de argumentos. Para poder luego acceder a dichos parámetros dentro de la función se utiliza el vector argumentos. Este ejemplo sumaría el valor de todos los parámetros: <script> function sumarArgumentos() { resultado = 0; 10
for (i=0; i<arguments.length; i++) resultado += arguments[i]; return resultado; } alert( "nº de argumentos:"+ sumarArgumentos("1","2")); Funciones predefinidas JavaScript dispone de las siguientes funciones predefinidas: eval(cadena) Ejecuta la expresión o sentencia contenida en la cadena que recibe como parámetro. mensaje = 'Hola'; eval("alert('" + mensaje + "');"); Este ejemplo nos muestra una ventana con un saludo. parseInt(cadena [, base]) Convierte en un número entero la cadena que recibe, asumiendo que está en la base indicada. Si este parámetro falta, se asume que está en base 10. Si fracasa en la conversión devolverá el valor NaN. parseInt("3453"); Devuelve el número 3453. parseInt("3453",16); Devuelve el número 13395 parseFloat(cadena) Convierte en un número real la cadena que recibe, devolviendo NaN si fracasa en el intento. parseFloat("3.12.3"); Este ejemplo devuelve NaN ya que la cadena no contiene un número real válido. isNaN(valor) Devuelve true sólo si el argumento es NaN. isFinite(numero) Devuelve true si el número es un número válido y no es infinito. Number(referencia) String(referencia) Convierten a número (o referencia) el objeto que se les pase como argumento •Objetos
Para crear objetos, primero es necesario definir su tipo (o clase): function empleado(nombre, edad, puesto) { this.nombre = nombre this.edad = edad this.puesto = puesto } En JavaScript, la partícula this se refiere al objeto en el que se utiliza. Una vez definida la clase, podemos crear variables (instanciar objetos) de esa clase de la siguiente manera: 11
empleado_1 = new empleado("Pedro", 26, "Programador") Pueden añadirse propiedades a los objetos aunque estas no haya sido declaradas en la definición de la clase. Por ejemplo: empleado_1.jefe = "Luis" Estas propiedades nuevas sólo afectaran a ese objeto y no al resto. Los objetos pueden anidarse de forma que un objeto sea un a propiedad de otro objeto. Por ejemplo: function oficina(ciudad, pais) { this.ciudad = ciudad this.pais = pais } oficinaPedro = new oficina("Madrid","España") empleado_1 = new empleado("Pedro", 26, "Programador", oficinaPedro) En el ejemplo anterior, hay que definir la clase empleado de esta forma: function empleado(nombre, edad, puesto, oficina) this.nombre = nombre this.edad = edad this.puesto = puesto this.oficina = oficina } Dentro de la definición de la clase o tipo del objeto, pueden incluirse funciones que accedan a sus propiedades. Estas funciones reciben el nombre de métodos. Un método se define de la siguiente manera: function mostrarPerfil() { document.write("Nombre: " + this.nombre + "
") document.write("Edad: " + this.edad + "
") document.write("Puesto: " + this.puesto + "
") } function empleado(nombre, edad, puesto) { this.nombre = nombre this.edad = edad this.puesto = puesto this.mostrarPerfil = mostrarPerfil } <TITLE>Empleados <SCRIPT LANGUAGE="JavaScript"> Perfil del empleado " + this.nombre + "
") document.writeln("Edad: " + this.edad) document.writeln("Puesto: " + this.nombre) 12
document.write("
") } //DEFINE EL OBJECTO EMPLEADO function empleado() { this.nombre = prompt("Introduzca el nombre del empleado: ", "Nombre") this.edad = prompt("Introduzca la edad de " + this.nombre, "00") this.mostrarPerfil = mostrarPerfil } //--> <SCRIPT LANGUAGE="JavaScript">