Archivo de la categoría: Lenguaje de programación

Lenguaje de programación es un lenguaje formal diseñado para realizar procesos que pueden ser llevados a cabo por máquinas

Tipos de datos en Javascript

Tipos de datos en Javascript

Los tipos en Javascript son una representación de los datos, ya que no requiere que las variables declaren su tipo, porque todos los tipos se convierten de forma automática

Tipo booleano

El tipo booleano simplemente distingue entre dos estados, un estado de éxito o de activado, valor verdadero, true, y un estado de fracaso o de desactivado, valor falso, false

Tipos numéricos

Los tipos numéricos los podemos dividir en reales y enteros

Tipo numérico entero

  • Decimal

    enteros en base 10

    Tanto positivos como negativos

  • Hexadecimal

    enteros en base 16

    Se coloca antes del número en base 16 0x ó 0X

  • Octal

    enteros en base 8

    Colocamos un cero antes de dicho número en octal

Tipo numérico real

Los reales se componen de una parte entera y otra fraccionaria separada por un punto de la anterior

La parte fraccionaria puede estar compuesta por un indicador de exponente E o e seguido de un número entero que indica el valor del exponente

Tipo string

Un string es una cadena de caracteres delimitadas por comillas

Las comillas serán simples o dobles atendiendo a una determinada regla

Por defecto se usarán comillas dobles ("), pero si alguna sentencia a de ir incluida entre dichas comillas, si esa sentencia contiene un string o a su vez otra sentencia que también deba ir delimitada por dichas comillas, estas comillas serán entonces comillas simples (‘)

Por otro lado, hay que tener en cuenta la escritura de caracteres especiales en lo que denominamos secuencias de escape

La secuencia de escape comienza siempre con el carácter \ y a continuación se escribe otro carácter que representa el código especial o el número en octal o hexadecimal de su código ASCII

Las secuencias de escape representan un único carácter en las strings en donde aparecen

Código Descripción
a Sonido
b Blanco
f Salto de línea
n Nueva línea
r Retorno de carro
v Tabulador vertical
\ Blackslash "\"
Comilla simple
" Comilla doble
Ooo Ascii en octal
Xhh Ascii en hexadecimal
t Tabulador horizontal

Arrays

Podemos crear arrays a los que le daremos un nombre y a los que accederemos con un índice que comenzará desde el elemento número 1 (no desde el 0 como en Java o en C / C++)

En los arrays al igual que con las variables no existen tipos predeterminados. Para crear un array es necesario definir una función como la que veremos a continuación:

Comentar sobre la función que la palabra reservada this hace referencia a la variable a actual, es decir, a la variable que contendrá el array

Por otro lado, observar que los array tienen una propiedad length que nos muestra la longitud de dicho array

Por último mostrar el uso de dicha función:

Objetos

Los objetos se componen de un conjunto de valores, propiedades y un conjunto de métodos aplicados a esos valores

Son estos métodos los que nos permiten modificar el estado de dicho objeto, es decir, el valor de sus propiedades

En JavaScript existen objetos predefinidos

A parte, el programador también puede crear sus propios objetos

Para hacer uso de las propiedades de un objeto basta con utilizar la siguiente notación:

mi_objeto.propiedad

Esto se verá con más claridad en el siguiente ejemplo, en el cual tenemos un objeto Universitario en el que tenemos las propiedades: Nombre, Apellido, Edad y Facultad. Suponiendo que tenemos una variable Uni1 que contiene en un momento determinado un objeto Universitario:

Pero no sólo podemos acceder a las propiedades de un objeto mediante la notación expuesta anteriormente, ya que, existe una relación entre los objetos y los arrays, puesto que podemos acceder a un objeto como si este fuera un array y sus elementos fueran los propiedades de dicho objeto en el orden en que se definieron

Este tipo de vectores se denominan arrays asociativos

Un método es una función asignada a un objeto. Así para asignar una función como método de un objeto se utiliza la siguiente sintaxis:

Podemos observar que el nombre del método es la manera en la que queremos nombrar a la función dentro del objeto

Un método puede ser llamado en un contexto mediante la sintaxis:

Objeto.nombreDelMétodo(parámetros);

La palabra reservada this nos permite referenciar al objeto actual

Por ejemplo, supongamos que la función validate permite validar las propiedades de un objeto mediante un mínimo y un máximo asociados; tendremos:

Se podrá llamar entonces a la función validate a cambio de los valores de un formulario mediante la palabra reservada this y el atributo OnChange que permite detectar los cambios de valores

Esto se hace mediante la marca HTML y el evento:

De manera general, la palabra this se refiere al objeto actual

El cliente y el servidor tienen un conjunto de objetos predefinidos que pueden ser completados mediante nuevos objetos

La creación de un objeto se hace en dos etapas:

  1. Definir el objeto mediante una función
  2. Crear un objeto mediante la palabra reservada new

Para definir un objeto, se creará una función que permita precisar su nombre, sus funciones y sus métodos asociados

Por ejemplo, si se quiere crear un objeto universitario cuyas propiedades serían nombre, apellido, edad y dni, se definirá la función genérica siguiente:

Las propiedades de un objeto pueden describirse mediante otros objetos

Hacemos que el objeto universitario tenga un propiedad del objeto Nota_Media por tanto:

Por tanto, para acceder a la nota final:

alumno.expediante.final

Cuando se define un objeto, es posible enriquecer su descripción mediante nuevas propiedades

alumno.dni = 44567234;

Ahora la propiedad dni pertenece a la instancia del objeto contenido en alumno

Esta modificación no afectará a los otros objetos del tipo universitario, ya que para añadir una propiedad a un tipo de objeto esta debe figurar en la definición del mismo

La definición de métodos asociados a un objeto puede precisarse en la definición del objeto

Por ejemplo, para el objeto universitario definimos una función que muestre el nombre, apellidos, dni y facultad de un alumno

Esta función se convierte en un método asociado al tipo realizando en su definición lo siguiente:

Su forma de uso será:

alumno.Datos();

En el siguiente ejemplo se muestra el funcionamiento del tipo universitario que hemos creado

Para ello creamos el siguiente formulario:

La función Mostrar_Univers(form) se define como sigue:

Nota media de la etapa académica


Nota No se han comprobado si los datos que se insertan en el formulario son "correctos", es decir, si las notas están entre 0 y 10, si los nombres y apellidos se componen sólo de letras o la edad sea numérica

Valor nulo

En JavaScript a las variables se les puede asignar un valor que indica el valor vacío, este valor es el valor null

La conversión de tipos de datos

Antes que nada, recordar que JavaScript no necesita declaración de tipos

El contenido de la variable se convertirá automáticamente en el transcurso del programa según su uso

El esquema de conversión del tipo se basa en el principio siguiente: el tipo asociado corresponde al del operando de la izquierda

Esto se debe a que la evaluación se realiza de izquierda a derecha

Por ejemplo, supongamos la definición de las variables siguientes:

Si evaluamos las siguientes expresiones

La primera expresión convertirá la variable un_numero en una cadena de caracteres porque el operando de la izquierda una_string es una cadena de caracteres

Esta expresión concatena las dos cadenas de caracteres y el resultado de x es: "742"

Por el contrario, la segunda expresión convierte la cadena una_string en un valor numérico porque el operando de la izquierda un_numero, es como su propio nombre indica, un número

Esta segunda expresión suma los dos números y el resultado de y es: 49

La conversión de tipos no puede hacerse en todos los casos posibles: ciertas cadenas de caracteres no pueden convertirse en número

Tales conversiones generan un error

Por ejemplo:

Tabla que resume la conversión de tipos en JavaScript:

Tipo Función Objeto Número Booleano String
Función Función Error Error Descompila
Objeto Error Error True ToString
Objeto nulo FunObj ok 0 False «null»
Número Error Número True ToString
Número = 0 Error Null False «0»
Booleano = true Error Booleano 1 «true»
Booleano = false Error Booleano 0 «false»
String Comilla simple String Numstr ok True
String nula Error String Error False

Estructuras de control en Javascript

Estructuras de control en Javascript

Para las estructuras de control, JavaScript posee las sentencias de control típicas de los lenguajes de alto nivel

Declaración de variables

A las variables en JavaScript no se les asigna un tipo predefinido

En JavaScript el tipo de las variables depende del valor que contengan las mismas en cada momento

Por tanto se realiza una conversión automática de tipos

JavaScript reconoce los siguientes tipos de valores:

Dado que no existen tipos de variables a priori, no hemos de especificar el tipo de variable cuando la declaramos

La declaración de variables se hace anteponiendo la palabra reservada var al nombre de la variable

Es posible asignarle el valor cuando la declaramos

La sentencia if

La sentencia if tiene la forma:

Los paréntesis asociados que delimitan la condición no son opcionales

En caso de que la condición sea verdadera se ejecutará la instrucción 1; en caso contrario se ejecuta si existe la instrucción 2

El uso de la sentencia else es opcional, por eso en la definición se han utilizado los corchetes

Si se omite, sólo se tendrá en cuenta el bloque de instrucciones cuando la condición sea verdadera

Un bloque de instrucciones es un conjunto de instrucciones delimitadas por llaves

Las llaves después de la sentencia if no son obligatorias

Si se omiten y la condición era verdadera, se ejecutará la siguiente instrucción

En caso contrario, se ejecutará la subsiguiente instrucción, de forma independiente al estado de la condición

De este modo, la omisión de las llaves después de la sentencia if nos permitirá escribirlo todo en una única línea terminada en ;

La sentencia else if

También podemos utilizar sentencias if anidades mediante la sentencia else if

Las sentencias else if funcionan igual que una sentencia if

Pero sólo se ejecutarán en caso de que la condición de la sentencia if fuese falsa

La sentencia switch

Hace que se seleccione un grupo de sentencias entre varias posibles

Es una alternativa al uso de sentencias else if anidadas

Su sintaxis es:

La expresión entre paréntesis del switch debe ser entera

Su resultado se comparará con los distintos valores del case

Si coincide con uno de ellos se pasará a la instrucción siguiente al case con dicho valor y se seguirán ejecutando las instrucciones consecutivas hasta encontrar una instrucción break o alcanzar las llaves de cierre del switch

En caso de que el resultado de la expresión no coincida con ningún valor se pasará la ejecución a la instrucción siguiente de la etiqueta default, si la hubiera, y se continuará como un case

Los valores en los case pueden ser una expresión constante

No puede haber dos case con el mismo valor

La sentencia while

La sentencia while tiene la forma

Los paréntesis no son opcionales

Si se cumple la condición, se ejecuta la instrucción o el bloque de instrucciones y se repite el proceso hasta que deje de cumplirse la condición

La sentencia do

La sentencia do tiene la forma

Es muy similar a la sentencia while, excepto que la condición va después de la instrucción o bloque de instrucciones

Con lo que al menos se ejecutan una vez aunque la condición sea falsa

La sentencia for

En cuando a dicha sentencia, en JavaScript podemos distinguir dos variantes:

  • El bucle for "clásico"
  • El bucle for / in

El bucle for "clásico"

Este bucle, tiene una sintaxis muy parecida a la de C / C++

En esta sintaxis:

Inicialización crea la variable contador y le da un valor inicial

Condición se debe cumplir para que el bucle se ejecute

Depende de la variable índice

Expresión actualiza el valor de la variable índice

El equivalente de esta expresión con while es:

El bucle for / in

Este bucle, tiene una sintaxis muy parecida al for-each de Java

Itera una variable var sobre todas las propiedades de un objeto obj que se le pasa

Así para cada valor de var se ejecutaran las sentencias del bucle

Por lo tanto, el bucle tendrá tantas iteraciones como propiedades el objeto y en cada iteración la variable tendrá el valor de la propiedad del objeto correspondiente con dicha iteración

Su sintaxis es:

La sentencia break

La sentencia break se puede colocar dentro de un bucle o bucles anidados

Cuando se ejecuta la sentencia break se abandona el bucle más interno

A todos los efectos la sentencia break actúa como un salto a la instrucción siguiente al bucle en el que se ejecuta

La sentencia continue

La sentencia continue, no abandona el bucle si no que hace que se ejecute la siguiente iteración

En el bucle while la ejecución del continue hace que el flujo del programa salte a la condición

En el bucle for la ejecución del continue hace que se ejecute la expresión de incremento, para después continuar normalmente con la condición

Es decir, la ejecución del continue evita que se ejecute el resto del cuerpo del bucle

Funciones en Javascript

Funciones

Para definir funciones disponemos de la instrucción function

Después de esta palabra reservada se coloca el nombre de la función seguido de una lista de argumentos delimitados por paréntesis y separados por comas

La sentencia return

La sentencia return es la que permite devolver el resultado de una función

En el ejemplo, se muestra una función que devuelve el área de un cuadrado de lado l

Propiedades de las funciones

JavaScript asocia a cada función dos propiedades:

  • arguments
    permite la gestión de los parámetros opcionales
  • caller
    identifica la función que hizo la llamada

La propiedad arguments

Es un array que contiene los parámetros que le son pasados a la función

En el ejemplo hemos definido la función Suma que permite calcular la suma de los números pasados como argumentos

Así, Suma(4,5,7) devuelve 16 y Suma(56) devuelve 56

La propiedad caller

Muestra el nombre de la función que llama, por lo tanto, esta propiedad devolverá una cadena de caracteres

Consideraciones a tener en cuenta

Antes de empezar a trabajar con funciones es necesario tener en cuenta los siguientes puntos:

  • El lenguaje JavaScript no permite las definiciones anidadas de funciones

  • El paso de parámetros se realiza por valor

    Es decir, si una función modifica el contenido de sus argumentos, esta modificación es local y no repercute ni globalmente ni a la función hizo la llamada

Funciones predefinidas por el lenguaje

Función eval

Tiene como argumento una expresión y devuelve el valor de la misma

Esta función resulta útil para evaluar una cadena de caracteres que representa una expresión numérica

La edición efectuada mediante un campo de formulario es una cadena de caracteres que a veces es necesario convertir en valor numérico

El ejemplo siguiente ilustra cómo permitiendo al usuario introducir una expresión numérica puede visualizarla como el valor de la expresión

Sino ha introducido nada, visualiza undefined y sino es una expresión numérica, no realiza cambios en la visualización


Funciones escape y unescape

Estas dos funciones permiten codificar cadenas de caracteres en formato URL

Esta codificación es necesaria en la creación automática de enlaces de hipertexto o en la definición de propiedades persistentes como los Cookies

Función isNaN

Función que comprueba si el valor pasado por parámetros es numérico o no

El resultado de esta función es un booleano

Es decir, evalúa un argumento para ver si es NaN: (Not a Number, No es un número)


Función parseFloat

Convierte una cadena de caracteres a un número en punto flotante

Si se encuentra un carácter que no sean número, el signo ‘+’, el ‘-‘ o un exponente, devuelve el valor encontrado hasta ese punto

Del mismo modo, si el primer carácter no se puede convertir a número devolverá cero


Función parseInt

Convierte una cadena de caracteres a un número entero con una base especificada

La base puede ser 8, 10 ó 16

Si se encuentra un carácter que no sean número, el signo ‘+’, el ‘-‘ o un exponente, devuelve el valor encontrado hasta ese punto

Del mismo modo, si el primer carácter no se puede convertir a número devolverá cero

jQuery

jQuery

jQuery es una librería de software libre escrita en Javascript, con Licencia MIT y Pública General de GNU v2, permite su uso en proyectos libres y privados

Responde al principio escribe menos, haz más

Para conseguirlo permite escribir código Javascript de una manera más sencilla, realizando en una sola llamada tareas que requeririan varias líneas de código

Simplifica muchas de las tereas comunes, como la manipulación del DOM, las propiedades CSS y las llamadas AJAX, además de permitir crear efectos o animaciones

Instalación

Descargamos la librería en su versión más estable desde su página oficial jQuery.com

Cargamos la librería en el head de nuestro código HTML:

En el ejemplo, version es el número actual de versión, puede variar en el momento de tu descarga

Es aconsejable que en producción se utilice la versión min, ya que está optimizada para una carga más rápida en el navegador

Existen tambien repositorios CDN de terceros que podemos consultar en la página oficial de descargas, que nos librarian de tener que actualizar la versión actual de la librería

Sin embargo, corremos el riesgo de tener fallos de seguridad si alguien externo introdujera código malicioso en dichos repositorios o quedasen inacesibles por cualquier causa

Para incluirlos simplemente modificariamos el src por la url del repositorio CDN que nos indican

Carga del codigo

Podemos incluir normalmente el código de jQuery dentro de un bloque script como hacemos con Javascript o usar un archivo externo .js donde incluyamos nuestro propio código

Para poder ejecutar nuestras instrucciones será util que el árbol DOM de nuestro HTML se haya cargado completamente, aunque podemos ejecutarlas antes de que ocurra

En el ejemplo se ha optado por cargar el árbol DOM cuando se ha cargado el HTML completamente, incluyendo nuestro código dentro de las llaves

En este otro ejemplo tenemos una versión equivalente que nos permite escribir menos código, elige la que más te guste, aunque la primera es más clara

Sintaxis básica

La sintaxis de jQuery es muy similar a CSS ya que todas las llamadas están compuestas por un selector seguido de una llamada

En el ejemplo podemos ver el símbolo $ que nos permite acceder a los elementos de jQuery

El selector nos permitirá seleccionar elementos concretos dentro del árbol DOM

La acción será una función que nos permite interactuar con el elemento seleccionado por el selector

En los ejemplos tenemos el operador this, que representa el elemento actual seleccionado

‘p’ es una etiqueta HTML válida que representa a un elemento, aquí podremos usar cualquiera de ellas para realizar búsquedas

Cuando veamos con más detalle los selectores, profundizaremos en cómo deben ser esas búsquedas

‘.test’ utiliza el símbolo . para referirnos a que lo que le sigue es una clase, en este caso, la clase test

‘#test’ utiliza el símbolo # para referirnos a que lo que le sigue es un id, en este caso, el id test

Selector

Selector

Un selector nos permite indicar sobre qué elementos queremos aplicar la acción

Existen las siguientes tipos de selector:

  • Elemento
  • Clase
  • Identificador

Elemento

Es posible seleccionar un elemento directamente según su tipo de etiqueta HTML

En este ejemplo hemos seleccionado todos los elementos de tipo párrafo

En este ejemplo ocultaríamos todos los elementos de tipo párrafo cuando pulsemos sobre el elemento de tipo botón

Clase

Se utiliza con el símbolo . y nos permite elegir los elementos con una clase concreta

En este ejemplo hemos seleccionado el elemento de la clase test

En este ejemplo ocultaríamos todos los elementos de la clase test cuando pulsemos sobre el elemento de tipo botón

Identificador

Se utiliza con el símbolo # y nos permite elegir los elementos con un id concreto

En este ejemplo hemos seleccionado el elemento con el id test

En este ejemplo ocultaríamos todos los elementos con el id test cuando pulsemos sobre el elemento de tipo botón

Ejemplo práctico

Más ejemplos de selector

Eventos

Eventos

Las acciones que el usuario realiza o los cambios que efectúe en la página se conocen con el nombre de eventos

Un evento es la señal de que ‘algo‘ ha sucedido

Sintaxis de los eventos

Es necesario especificar un selector, para saber sobre qué elemento interactuará el evento, seguido del evento entre paréntesis

Vamos a usar el siguiente HTML de ejemplo, que contiene un sencillo formulario, para ir conociendo el uso de los eventos, acompañado de un fichero que llamaremos event.js

Para procesar el formulario también hemos añadido un fichero form.php, sin embargo, no lo vamos a utilizar con los ejemplos sobre eventos

Eventos de elemento

Este tipo de evento es el que normalmente usará el usuario para interactuar con los elementos del HTML, cuando pase el ratón sobre el elemento o sea pulsado, entre otros

Entre los más importantes destacamos:

  • focus

    se activa cuando el foco se dirige al elemento

  • blur

    se activa cuando cuando el foco se dirige a otro elemento o lo pierde

  • click

    se activa cuando se hace click sobre el elemento

  • dblclick

    se activa cuando se hace doble click sobre el elemento

En el ejemplo se ha seleccionado el elemento con el id button y responde al evento click que tiene como parámetro la variable warning

Podría haberse incluido el código dentro del evento click, pero se ha querido recalcar que los parámetros pueden ser una variable que contiene una función, así podemos tener distintas variables con distinto comportamiento, sin tener que modificar nuestro código

Eventos de ratón

Se producen cuando el usuario utiliza el ratón dentro del documento HTML o cualquier de los elementos que lo componen

Entre los más importantes destacamos:

  • mousedown

    se activa al pulsar un botón del ratón

  • mouseup

    se activa cuando se deja de pulsar un botón del ratón

  • mousemove

    se activa cuando se mueve el ratón

  • mouseover

    se activa cuando se mueve el ratón sobre un elemento (cuando entramos en el elemento)

  • mouseout

    se activa cuando el ratón abandona el elemento (cuando salimos del elemento)

En el ejemplo se han añadido un par de eventos más que cambian el tipo de letra cuando se pasa el ratón sobre el elemento con id button

Es posible asignar a estos eventos parámetros que contienen información sobre el evento del ratón

Entre los más importantes destacamos:

  • screenX y screenY

    representan las coordenadas del puntero del ratón con respecto a las coordenadas globales de la pantalla

  • clientX y clientY

    representan las coordenadas del puntero del ratón con respecto a la ventana del navegador

  • button

    es el número de botón que ha sido pulsado (izquierdo = 0, central = 1, derecho = 2)

    Si no queremos pasarlo como parámetro, podemos usar la propiedad buttons, que incluye más botones, como la rueda del ratón o los botones de adelante y atrás del navegador

En el ejemplo se ha modificado la variable warning para que detecte qué botón ha sido pulsado y qué posición tenía el ratón en la pantalla, cuando ha sido pulsado

Eventos de teclado

Se producen cuando el usuario utiliza el teclado

Entre los más importantes destacamos:

  • keydown

    se activa al pulsar una tecla

  • keyup

    se activa cuando se deja de pulsar una tecla

  • keypress

    se activa cuando se pulsa y se deja de pulsar una tecla

Es posible asignar a estos eventos parámetros que contienen información sobre el evento del teclado

Entre los más importantes destacamos:

  • char o charCode

    es una cadena con el carácter que ha sido pulsado (siempre que el mismo sea representable)

  • key o keyCode

    es un identificador que representa la tecla que ha sido pulsada

    Puedes consultar la lista completa en la página para desarrolladores de Mozilla

  • ctrlKey, shitKey y altKey

    son campos que indican si las teclas Control, Shift o Alt habian sido pulsadas cuando se produjo el evento de teclado

En el ejemplo se ha añadido la variable key con parámetros para capturar las teclas pulsadas al escribir en el elemento con el id login y se ha modificado el conjunto de llamadas para utilizarlo, usando el evento keypress

Eventos de toque

Estos eventos se producen al tocar una pantalla tactil

Son similares a los producidos por un ratón, pero su retardo es mucho menor

A causa de ello, pueden producirse conflictos con los eventos del ratón, por eso es recomendable deshabilitarlos, para no ejecutar eventos similares dos veces

Entre los más importantes destacamos:

  • touchstart

    se activa cuando el dedo toca la superficie de la pantalla

  • touchend

    se activa cuando el dedo deja de pulsar la superficie de la pantalla

  • touchmove

    se activa cuando el dedo se desliza por la superficie de la pantalla

  • touchenter

    se activa cuando el dedo se mueve sobre un elemento (cuando entramos en el elemento)

  • touchleave

    se activa cuando el dedo abandona el elemento (cuando salimos del elemento)

  • touchcancel

    se activa cuando el dedo se sale fuera de los límites de la ventana del navegador

Eventos de formulario

Los formularios tienen sus propios eventos, entre los más importantes destacamos:

  • click

    se activa cuando hacemos click con el ratón sobre un elemento
    Normalmente suele usarse con los botones (button, submit)

  • change

    se activa cuando el usuario modifica el valor de un elemento de texto

    Normalmente suele usarse con los input de tipo texto, los textarea o las listas desplegables al seleccionar una opción

  • focus

    se activa cuando el usuario selecciona un elemento del formulario

  • blur

    se activa cuando el usuario pasa a otro elemento del formulario

  • submit

    se activa cuando el usuario realiza la acción de enviar el formulario (no sólo cuando se pulsa el botón de submit, ya que puede simularse al pulsar un button que hace las veces de submit o cuando se fuerza una llamada al evento desde otro evento)

    Adicionalmente, el evento submit genera los eventos mousedown, click, mouseup y submit, en ese mismo orden, lo que nos permite realizar validaciones en los elementos del formulario antes de enviarlo definitivamente

  • reset

    se activa cuando el usuario realiza la acción de resetear el formulario (no sólo cuando se pulsa el botón de reset, ya que puede simularse al pulsar un button que hace las veces de reset o cuando se fuerza una llamada al evento desde otro evento)

En el ejemplo se han añadido las variables send (para validar los campos login y pass) y write (para validar que no se introduzca el símbolo @ en el campo pass); se ha modificado el conjunto de llamadas para utilizarlos, usando los eventos submit y change

Modificación de estilos

Modificación de estilos

JQuery permite modificar facilmente los estilos y las propiedades CSS de nuestra página web

Añadir o eliminar propiedades CSS

Mediante los métodos addClass() y removeClass() podemos asignar o quitar una clase CSS de cualquier elemento

En el ejemplo se añaden los estilos important y color al elemento con id div01 cuando pulsemos el botón btn01 y se elimina el estilo color

Manipulación de las propiedades CSS

El método css() nos permite consultar o modificar cualquier propiedad de la hoja de estilos de un elemento HTML

Tiene la siguiente sintaxis:

En caso de que sólo queramos consultar la propiedad, omitiremos el parámetro valor y si queremos modificarlo, usaremos ese parámetro

En el ejemplo se han usado tres párrafos distintos con un estilo para el color de fondo distinto, si pulsamos el botón con id btn03 podemos comprobar que con el método css hemos cambiado todos los párrafos a color amarillo

Efectos

Efectos

JQuery permite, de una forma sencilla, crear efectos, transiciones, movimientos, animaciones, etc

Hide y Show

El método hide permite ocultar un elemento

Para poder volver a hacerlo visible podemos utilizar el método show

En el ejemplo anterior cuando se pulsa el botón con id hide se ha usado el método hide con un parámetro en el que se indica la velocidad (en milisegundos) para ocultar el párrafo con id part01

Al pulsar el botón con id show se ha usado el método show con un parámetro en el que se indica la velocidad (en milisegundos) para mostrar de nuevo el párrafo con id part01

Toggle

Permite alternar entre hide() y show(), o viceversa, también admite el parámetro para controlar la velocidad

Este ejemplo es similar al mostrado con hide y show, pero se obtiene un ejecto parecido con menos código

Fading

Es similar a Toggle, ya que el elemento aparece o desaparece, sin embargo lo hace de forma gradual

Vamos a usar este ejemplo para probar los distintos métodos de fadding

FadeIn

Permite que un elemento oculto aparezca

Admite un parámetro para indicar la velocidad (en milisegundos) o los valores ‘slow’ o ‘fast’

Modificamos el HTML del ejemplo anterior para añadir este script

FadeOut

Permite que un elemento se oculte

Admite un parámetro para indicar la velocidad (en milisegundos) o los valores ‘slow’ o ‘fast’

Modificamos el HTML del ejemplo anterior para añadir este script

FadeToggle

Permite altenar entre los efectos fadeIn y fadeOut de un elemento

Admite un parámetro para indicar la velocidad (en milisegundos) o los valores ‘slow’ o ‘fast’

Modificamos el HTML del ejemplo anterior para añadir este script

Sliding

Nos permite mover elementos para que se muestren hacia arriba o hacia abajo

Vamos a usar este ejemplo para probar los distintos métodos de sliding

SlideDown

Mueve hacia abajo el elemento

Admite un parámetro para indicar la velocidad (en milisegundos) o los valores ‘slow’ o ‘fast’

Modificamos el HTML del ejemplo anterior para añadir este script

SlideUp

Mueve hacia arriba el elemento

Admite un parámetro para indicar la velocidad (en milisegundos) o los valores ‘slow’ o ‘fast’

Modificamos el HTML del ejemplo anterior para añadir este script

SlideToggle

Permite altenar entre los efectos slideDown y slideUp del elemento

Admite un parámetro para indicar la velocidad (en milisegundos) o los valores ‘slow’ o ‘fast’

Modificamos el HTML del ejemplo anterior para añadir este script

Animaciones

También es posible crear animaciones personalizadas con el método animate() con la siguiente sintaxis:

El primer parámetro define un conjunto de propiedades CSS, encerradas entre los simbolos { y }, que se van a modificar

El segundo indica la velocidad (en milisegundos) o los valores ‘slow’ o ‘fast’

Vamos a usar este ejemplo para probar varias formas de hacer animaciones

Modificamos el HTML del ejemplo anterior para añadir este script, en el que hemos modificado una única propiedad

Modificamos el HTML del ejemplo anterior para añadir este script, en el que hemos modificado varias propiedades

Modificamos el HTML del ejemplo anterior para añadir este script, en el que hemos modificado varias propiedades utilizando valores relativos

Modificamos el HTML del ejemplo anterior para añadir este script, en el que hemos modificado varias propiedades ejecutando varias animaciones consecutivas una detras de otra

Ajax

AJAX

Ajax (asynchronous Javascript and XML) permite cargar contenido desde una página web y mostrarlo sin tener que recargarla

Casi cualquier página web actual utiliza esta tecnología: Gmail, Google Maps, YouToube, Facebook, etc

Para realizar esta tarea, Ajax construye una capa de proceso adicional entre la página web y nuestro servidor

De esta manera, las peticiones al servidor serán asíncronas, sin entorpecer el proceso de carga ni las acciones del usuario

Mientras que en el lado del navegador, el usuario podrá realizar acciones en cualquier momento sin quedar paralizado esperando una respuesta del servidor

La actualización de los elementos se realiza a traves de la capa Ajax, de forma dinámica y continua mientras el usuario sigue usando la página

Elementos que componen Ajax

Ahora vamos a examinar cada uno de los distintos elementos que componen una aplicación Ajax

XMLHTTPRequest

El objeto XMLHTTPRequest se encuentra soportado por todos los navegadores modernos, a partir de Internet Explorer 5+, además de Mozilla, Firefox, Konqueror, Opera y Safari

Es soportado por una amplia variedad de plataformas, como Microsoft Windows, UNIX / Linux y Mac OS X

El propósito de este objeto es permitir a Javascript la formulación y el envío de peticiones HTTP al servidor

Antes de utilizar el objeto, debemos llamarlo con su constructor y adaptarlo según las peculiaridades de cada navegador

Microsoft fue el primero en introducir el objeto, con una implementación del mismo como un ActiveX

El resto de navegadores han incluido una versión nativa del mismo aunque implementandolo como un objeto Javascript

Dado que el objeto depende de qué navegador y qué sistema operativo es capaz de utilizarlo, hay que adaptar el código para instancie correctamente

En el ejemplo anterior se muestra cómo sería la llamada del constructor dependiendo del navegador si usaramos código Javascript puro

Si utilizamos el objeto navigator que almacena información sobre el navegador, podríamos hacer una comparación condicional según el tipo de navegador simplemente usandolo como una variable:

Propiedades del objeto

  • onreadystatechange

    determina qué manejador de eventos se llamará cuando cambie la propiedad readyState del objeto

  • readyState

    es un valor entero que informa del estado de la petición:

    • 0 = sin inicializar
    • 1 = cárgandose
    • 2 = cargada
    • 3 = interactiva
    • 4 = completada
  • responseText

    cadena de texto devuelta por el servidor que representa los datos de la petición

  • responseXML

    documento XML devuelto por el servidor que representa los datos de la petición

  • status

    código HTTP de estado devuelto por el servidor

  • statusText

    cadena de texto devuelta por el servidor con una descripción del estado

Métodos del objeto

  • abort()

    detiene la petición actual

  • getAllResponseHeaders()

    devuelve una cadena de texto que contiene todos los encabezados

  • getResponseHeader(x)

    devuelve una cadena de texto con el valor del encabezado x

  • open(‘método’, ‘URL’, ‘a’)

    especifica si el método de la petición es GET o POST, la URL de destino y si la petición debe manejarse de forma asíncrona (si a es true) o síncrona (si es false)

  • send(contenido)

    envía la petición con datos POST de forma opcional

  • setRequestHeader(‘x’, ‘y’)

    define los parámetros con una pareja variable (x) / valor (y) y se asigna al encabezado que se envía con la petición

Ajax con jQuery

Gracias a jQuery, podemos utilizar un código más simplificado y sencillo que nos permite incluso olvidarnos del tipo de navegador o el sistema gracias a los métodos get(), post(), load() y ajax()

get()

Este método solicita datos al servidor con una solicitud HTTP GET

GET se usa básicamente para obtener (recuperar) algunos datos del servidor

El método GET puede devolver datos en caché

Tiene la siguiente sintaxis:

  • URL

    es la dirección de destino

  • callback

    es un parámetro opcional que representa el nombre de la función que se ejecutará en el caso de que la solicitud sea realizada correctamente

En el ejemplo podemos ver cómo cuando pulsemos el elemento button se lanzará una petición GET al servidor, que en este caso trabaja con el lenguaje PHP, a la URL test.php y que contiene el código que debe ejecutarse

Si la solicitud se ejecutase correctamente, se ejecutaría la función anónima que muestra al usuario una advertencia con el contenido de los parámetros data y status

post()

Este método solicita datos al servidor con una solicitud HTTP POST

POST envía datos para su procesamiento a un recurso especificado

El método POST nunca almacena en caché los datos, y a menudo se usa para enviar datos junto con la solicitud

Tiene la siguiente sintaxis:

  • URL

    es la dirección de destino

  • data

    es un parámetro opcional que especifica los datos que serán enviados junto con la solicitud

  • callback

    es un parámetro opcional que representa el nombre de la función que se ejecutará en el caso de que la solicitud sea realizada correctamente

En el ejemplo podemos ver cómo cuando pulsemos el elemento button se lanzará una petición POST al servidor, que en este caso trabaja con el lenguaje PHP, a la URL user.php y que contiene el código acerca del usuario que debe ejecutarse

Si la solicitud se ejecutase correctamente, se ejecutaría la función anónima que muestra al usuario una advertencia con el contenido de los parámetros data y status

load()

Este método obtiene contenidos del servidor y los añade a un elemento de nuestra página

Tiene la siguiente sintaxis:

  • URL

    es la dirección de destino

  • data

    es un parámetro opcional que especifica los datos que serán enviados junto con la solicitud

  • callback

    es un parámetro opcional que representa el nombre de la función que se ejecutará en el caso de que la solicitud sea realizada correctamente

    Esta función ha de tener obligatoriamente los siguientes parámetros:

    • responseTxt

      el contenido de respuesta en caso de éxito

    • statusTxt

      es una cadena de texto con el estado de la petición, puede ser uno de los siguientes valores:

      • abort
      • error
      • notmodified
      • parsererror
      • success
      • timeout
    • xhr

      contiene el objeto XHTMLRequest, el cuál nos proporciona información adicional acerca de la petición Ajax

En el ejemplo podemos ver cómo cuando termine de cargarse el árbol DOM se cargará el contenido de datos.html en el elemento con el id div01, en concreto los elementos dentro de ese fichero que tengan el id p1

Al utilizar un selector para elementos HTML que queremos cargar, jQuery los filtrará sin problemas, como hemos visto en este ejemplo

También podemos cargar otros tipos de fichero, como por ejemplo .txt, pero hemos de tener en cuenta que ha de realizarse por el protocolo HTTP y no directamente desde disco (con file://)

En el caso de que la petición fallase, veríamos El contenido se cargará aquí, en vez del contenido cargado

ajax()

Este método realiza una petición asincrona HTTP

Tiene la siguiente sintaxis:

  • URL

    es un parámetro opcional que recoge la dirección de destino, si no se especifica habrá que añadirlo dentro del parámetro settings como otro valor más

  • settings

    especifica los datos que serán enviados junto con la solicitud

    Pueden ser especificados valores por defecto para todas las peticiones Ajax utilizando el método ajaxSetup()

En el ejemplo podemos ver que se lanzará una petición POST al servidor, que en este caso trabaja con el lenguaje PHP, a la URL teams.php y que contiene el código que debe ejecutarse

En dataType se ha especificado que se va recibir un objeto de tipo JSON y que se van a utilizar los datos proporcionados por el método llamado get_groups con los parámetros league que recoge su valor del elemento con id team-league y season que recoge su valor del elemento con id team-season

Se han incluido los callback hooks beforeSend, error, dataFilter, success y complete para ilustar el orden en el que son llamados

Sólo se ha dotado de código a error, en caso de que falle la petición y a success, en caso de que sea correcta

Si se ejecuta el callback hook success, se recorreran todos los datos recibidos en formato JSON y serán añadidos al elemento con id team-group que corresponde a un elemento option de un campo de selección, este nuevo elemento será añadido al final de los ya existentes

Parámetros de settings

  • accepts

    asigna un determinado dataType de tipo MIME, que se enviará en la cabecera de la solicitud

    Este encabezado le informa al servidor qué tipo de respuesta será aceptada

    En el ejemplo se ha asignado un tipo MIME para trabajar con datos en el formato XML y el servidor devolverá el ‘mycustomtype‘ tal y como se lo hemos especificado

    Para poder trabajar correctamente con el nuevo tipo, es preciso utilizar converters para convertirlo correctamente al formato que nosotros queremos devolver

  • async

    por defecto, todas las solicitudes se envían de forma asíncrona (se establece a true de forma predeterminada)

    Para configurarlas de forma síncrona debe asignarsele como false

    Las solicitudes cross-domain y las dataType: ‘jsonp’ no admiten operaciones sincrónicas

    Hay que tener en cuenta que las solicitudes síncronas pueden bloquear temporalmente el navegador, deshabilitando cualquier acción mientras la solicitud siga activa

    A partir de jQuery 1.8 , el uso de async: false con jqXHR ($.Deferred) está deprecated; deben usarse los callback success, error o complete en lugar de los métodos correspondientes del objeto jqXHR tales como jqXHR.done()

  • beforeSend

    es un método de evento Ajax que se ejecuta antes de la llamada de petición que se puede utilizar para modificar el objeto jqXHR (en jQuery 1.4.x, XMLHTTPRequest) antes que sea enviado

    Puese usarse para añadir cabeceras personalizadas, etc

    Los objetos jqXHR y settings son pasados como argumentos

    Si devuelve false, se cancelará la solicitud

    A partir de jQuery 1.5, las opciones son llamadas independientemente del tipo de solicitud

  • cache

    si se establece en false, forzará que el navegador no almacene en caché las páginas solicitadas

    Establecida en false solo funcionará correctamente con las solicitudes HEAD y GET si se ha agregado ‘_ = {timestamp}‘ a los parámetros GET

    El parámetro no es necesario para otros tipos de solicitudes, excepto en IE8 cuando se realiza un POST a una URL que ya ha sido solicitada con GET

  • complete

    es un método de evento Ajax que se ejecuta después de los eventos success y error

    Este método pasa dos argumentos: jqXHR (en jQuery 1.4.x, XMLHTTPRequest) y una cadena de texto con el estado de la solicitud (‘success‘, ‘notmodified‘, ‘nocontent‘, ‘error‘, ‘timeout‘, ‘abort‘, o ‘parsererror‘)

    A partir de jQuery 1.5, puede aceptar varias peticiones y cada una llamará por turno

  • contents

    determina cómo jQuery analizará la respuesta, dado su tipo de contenido, admite expresiones regulares (añadido en jQuery 1.5)

  • contentType

    tipo de contenido con el cual se enviaran los datos al servidor
    El valor predeterminado es ‘application/x-www-form-urlencoded; charset=UTF-8

    Si pasa explícitamente un tipo de contenido a $.ajax(), siempre será enviado al servidor (incluso si no se envían datos)

    A partir de jQuery 1.6 puede pasarse false para decirle a jQuery que no establezca ningún encabezado de tipo de contenido

    La especificación W3C XMLHttpRequest dice que el juego de caracteres siempre debe de ser UTF-8; especificar otro juego de caracteres no obligaráal navegador a cambiar su codificación

    Para las solicitudes para cross-domain, cuando sea distinta de ‘application/x-www-form-urlencoded‘, ‘multipart/form-data‘, o ‘text/plain‘, el navegador realizará comprobaciones previas a enviar la petición al servidor

  • context

    contexto para todas las respuestas de la petición, de manera predeterminada, el contexto es un objeto que representa la configuración utilizada en la llamada ($.ajaxSettings junto con la configuración introducida con $.ajax() )

    Por ejemplo, especificar un elemento DOM como contexto hará su contexto para el evento de callback complete sea:

  • converters

    método para convertir el valor devuelto al formato que necesitemos como respuesta (añadido en jQuery 1.5)

  • crossDomain

    se utiliza al forzar una solicitud crossDomain (como JSONP) en el mismo dominio, debe establecerse el valor de crossDomain a true

    Esto permite, por ejemplo, la redirección desde el servidor a otro dominio (añadido en jQuery 1.5)

  • data

    datos que se van a enviar al servidor, serán convertidos en una cadena de consulta

    Se añadirá a la url en las solicitudes GET

    Consulta la opción processData para evitar este proceso automático

    En caso de ser una matriz, jQuery serializará varios valores con la misma clave en función del valor de la configuración de traditional

  • dataFilter

    método que se utilizará para manejar los datos de respuesta sin procesar de XMLHttpRequest

    Acepta dos parámetros:

    • data

      los datos sin procesar devueltos por el servidor

    • dataType
  • dataType

    tipo de datos esperado por por servidor

    Si no se especifica ninguno, jQuery intentará inferirlo en función del tipo MIME de la respuesta (un tipo MIME XML generará XML, en 1.4 JSON generará un objeto JavaScript, en 1.4 el script ejecutará el script, y cualquier otro tipo será devuelto como una cadena)

    Los tipos disponibles (y el resultado pasado como primer argumento para su devolución de la llamada aceptada) son:

    • xml

      devuelve un documento XML que se puede procesar a través de jQuery

    • html

      devuelve un documento HTML como texto sin formato; las etiquetas de script incluidas se evaluarán cuando se inserten en el DOM

    • script

      se evalúa la respuesta como JavaScript y es devuelta como texto sin formato

      Deshabilita el almacenamiento en caché agregando un parámetro en la cadena de consulta ‘_ = {timestamp}‘ a la URL, a menos que la opción cache esté establecida como true

      En este caso los POST serán convertidos en GET para las peticiones de remote-domain

    • json

      se evalúa la respuesta como JSON y devuelve un objeto JavaScript

      Los json solicitudes callback placeholder, por ejemplo ‘?callback=?‘, se realizan utilizando JSONP a menos que la solicitud incluya jsonp: false en la configuración de la petición

      Los datos JSON se analizan de manera estricta; cualquier JSON con formato incorrecto será rechazado y se lanzará una error

      A partir de jQuery 1.9, también se rechazan las respuestas vacías; el servidor debería devolver una respuesta null o {} en su lugar (consulta json.org para obtener más información sobre la correción del formato JSON)

    • jsonp

      carga en un bloque JSON usando JSONP

      Añade ‘?callback=?‘ al final de su URL para especificar la devolución de la petición

      Deshabilita el almacenamiento en caché agregando un parámetro en la cadena de consulta ‘_ = {timestamp}‘ a la URL, a menos que la opción cache esté establecida como true

    • text

      cadena de texto sin formato

    • varios valores separados por espacios

      a partir de jQuery 1.5, es posible convertir un dataType recibido en el encabezado Content-Type al que sea necesario

      Por ejemplo, si desea que una cadena de texto sea tratada como un XML, use ‘text xml

      También puede realizar una solicitud JSONP, recibida como texto y será interpretada por jQuery como XML: ‘jsonp text xml

      De igual manera, la cadena abreviada ‘jsonp xml‘, primero, intentará convertir de jsonp a xml y, en su defecto, convertirá de jsonp a texto, y luego de texto a xml

  • error

    evento Ajax que será llamado si la petición falla

    A partir de jQuery 1.5, admite un array de métodos y cada uno será llamado por turno

    No será llamado con peticiones cross-domain script y JSONP

    Recibe los siguientes parámetros:

    • jqXHR

      (en jQuery 1.4.x, XMLHttpRequest)

    • cadena de texto

      describe el tipo de error que se produjo

      Admite los siguientes valores:

      • null

        no es una cadena, es el literal null

      • timeout
      • error
      • abort
      • parsererror
    • errorThrown

      objeto para excepciones, es opcional

      Cuando se produce un error HTTP, errorThrown recibe la parte textual del estado HTTP, como ‘Not Found‘ o ‘Internal Server Error‘, con este parámetro podemos sustituir sus opciones y configurarlo

  • global

    activa el uso de varios eventos globales de Ajax
    Su valor por defecto es true

    Use false para evitar que los eventos globales ajaxStart o ajaxStop esten activos

  • headers

    encabezados adicionales enviados junto con la petición utilizando XMLHttpRequest, pudiendo modificar el objeto modificando el valor X-Requested-With: XMLHttpRequest

    Tambien es posible cambiar el valor con el evento Ajax beforeSend (añadido en jQuery 1.5)

  • ifModified

    comprueba el valor de cabecera Last-Modified para ver si la última petición tuvo éxito

    Su valor predeterminado es false, ignora el encabezado

    Desde jQuery 1.4, también verifica el valor ‘etag‘ especificado por el servidor para capturar los datos no modificados

  • isLocal

    permite que el entorno actual sea reconocido como ‘local‘ (por ejemplo, el sistema de archivos), incluso si jQuery no lo reconoce como tal por defecto

    Los protocolos siguientes son reconocidos actualmente como locales:

    • file
    • *-extension
    • widget

    Si la configuración de isLocal necesita ser modificada, se recomienda hacerlo con el método $.ajaxSetup() (añadido en jQuery 1.5.1)

  • jsonp

    sobreescribe la función de respuesta de las peticiones JSONP

    Este valor será usado en lugar del ‘callback‘ en la cadena de consulta de la url cuando se añade ‘callback=?

    Por ejemplo {jsonp:’onJSONPLoad’} devolvería al servidor ‘onJSONPLoad=?

    A partir de jQuery 1.5, configurar jsonp a false evitar que jQuery agregue la cadena ‘?callback‘ a la URL o que intente usar ‘=?‘ al realizar la transformación

    En este caso, debe establecerse explícitamente la configuración para jsonpCallback

    Por ejemplo, { jsonp: false, jsonpCallback: ‘callbackName’ }

    Por razones de seguridad, si el receptor objetivo no es de confianza, es recomendable configurar la propiedad jsonp a false

  • jsonpCallback

    especifica el nombre de la función de retorno para una petición JSONP

    Este valor se utilizará en lugar del nombre aleatorio generado automáticamente por jQuery

    Es recomendable dejar que jQuery genere ese nombre único, ya que facilitará la gestión de las peticiones y podrá controlar mejor los callbacks y las excepciones de error

    Es posible especificar el retorno de la petición cuando esté habilitada la caché del navegador para peticiones GET

    A partir de jQuery 1.5, también puede usar una función para configurarlo, en cuyo caso el valor de jsonpCallback se establece con el valor de retorno de esa función

  • method

    método HTTP que se utilirá en la petición (por ejemplo ‘POST‘, ‘GET‘, ‘PUT‘ (añadido en jQuery 1.9.0)

  • mimeType

    tipo mime que sobreescribe el tipo mime XHR (añadido en jQuery 1.5.1)

  • password

    contraseña que será utilizada con XMLHttpRequest como respuesta a una petición de autenticación de acceso HTTP

  • processData

    por defecto, los datos pasados ​​a data (cualquier cosa que no sea una cadena) se procesará y transformarán a una cadena de consulta, que se ajustará al tipo de contenido predeterminado ‘application/x-www-form-urlencoded

    Para enviar un DOMDocument u otros datos no procesados, configurelo a false

  • scriptAttrs

    define atributos adicionales para usar en las peticiones ‘script‘ o ‘jsonp

    Donde:

    • key

      representa el nombre del atributo

    • value

      es el valor del atributo

    Al recibir este objeto, se forzará el uso de la etiqueta de script un transporte

    Por ejemplo, puede ser usado para declarar los atributos nonce, integrity o crossorigin para satisfacer los requisitos de la política de seguridad del contenido (añadido en jQuery 3.4.0)

  • scriptCharset

    sólo se utiliza con el ‘script‘ de transporte

    Define el atributo charset de la etiqueta de script utilizada en la petición

    Es usado cuando el juego de caracteres en la página local no es el mismo que el del script remoto

    Alternativamente, el atributo charset se puede definir con scriptAttrs, lo que también asegurará el uso del transporte ‘script

  • statusCode

    códigos numéricos HTTP y funciones que serán llamadas como respuesta a ese código

    Por ejemplo, cuando el estado de respuesta sea 404, mostrará un aviso al usuario:

    Si la petición es correcta, el código de estado de la función tomará los mismos parámetros que el retorno de la petición correcta; si se produce un error (incluida la redirección 3xx), tomará los mismos parámetros que el error de callback (añadido en jQuery 1.5 )

  • success

    evento Ajax llamada si la petición es correcta

    Tiene los siguientes argumentos:

    • data

      datos devueltos por el servidor, formateados según el parámetro dataType o la función de callback dataFilter, si ha sido definida

    • textStatus

      cadena de texto que describe el estado

    • jqXHR

      (en jQuery 1.4.x, XMLHttpRequest)

    A partir de jQuery 1.5, admite un array de métodos y cada uno será llamado por turno

  • timeout

    establece un tiempo de espera (en milisegundos) para la petición
    El valor 0 significa que no habrá tiempo de espera

    Esto anulará cualquier tiempo de espera global definido con $.ajaxSetup()

    El período de tiempo de espera comienza cuando se realiza la llamada a $.ajax

    Si hay otras peticiones en curso y el navegador no tiene conexiones disponibles, es posible que alguna petición agote el tiempo de espera antes de que pueda ser enviada

    A partir de jQuery 1.4.x, el objeto XMLHttpRequest tomará el estado de no válido si la petición agota el tiempo de espera

    Acceder a cualquier campo del objeto puede generar una excepción

    Solo en Firefox 3.0+, las solicitudes de script y JSONP no son canceladas mediante un tiempo de espera; el script se ejecutará incluso si es recibido después del tiempo de espera

  • traditional

    tomará el valor true si se desea utilizar el estilo tradicional de parametros serializados

  • type

    alias para method. Use type para versiones de jQuery anteriores a 1.9.0

  • url

    cadena que contiene la URL a la que se envía la petición

  • username

    nombre de usuario que será utilizado con XMLHttpRequest en respuesta a una solicitud de autenticación de acceso HTTP

  • xhr

    retorno de la petición para crear el objeto XMLHttpRequest

    Su valor predeterminado es ActiveXObject cuando este disponible (IE), XMLHttpRequest en caso contrario

    Sobreescribalo para proporcionar su propia implementación de XMLHttpRequest o alguna mejora propia

  • xhrFields

    define el objeto nativo XHR (añadido en jQuery 1.5.1 )

    Por ejemplo, se puede usar para definir withCredentials a true para las peticiones cross-domain, si fuera necesario:

    En jQuery 1.5, la propiedad withCredentials no es nativa para XHR y por lo tanto, las peticiones CORS (Control de acceso HTTP, Cross-Origin Resource Sharing
    )
    que la requieran la ignorarán

    Por esta razón, te recomiendo usar jQuery 1.5.1+ en caso de que requiera ser usada

PHP

PHP

PHP es un lenguaje de programación interpretado basado en scripts orientado a las páginas Web

No es un lenguaje de marcado como podría ser HTML,
XML o WML

Un programa PHP es ejecutado en el servidor y el resultado enviado al navegador

El resultado generalmente generará una página HTML, XML o WML

Al ser un lenguaje que se ejecuta en el servidor no es necesario que el navegador lo soporte, pero para que las páginas PHP funcionen, el servidor donde están alojadas sí debe soportarlo

Historia de PHP

Fue originalmente diseñado en lenguaje Perl, apoyándose en un conjunto de CGI binarios (un programa que se ejecuta en servidor web) escritos en el lenguaje C por el programador danés-canadiense Rasmus Lerdorf en 1994 para mostrar su currículum vítae y guardar ciertos datos, como la cantidad de tráfico que su página web recibía

El 8 de junio de 1995 fue publicado bajo el nombre de Personal Home Page Tools después de que Lerdorf lo combinara con su propio sistema para procesar formularios FI (Form Interpreter) dando como resultado el PHP/FI

El sistema Personal Home Page Tools adquirió relativo éxito gracias a que otras personas pidieron a Rasmus que les permitiese utilizar sus programas en sus propias páginas

Dos programadores israelíes del Technion, Zeev Suraski y Andi Gutmans, reescribieron el analizador sintáctico (parser) en 1997 y crearon la base del PHP 3, y cambiaron su nombre por el de PHP (Hypertext Preprocessor)

PHP3 se publicó oficialmente en junio de 1998

En 1999, Suraski y Gutmans reescribieron el código de PHP, y crearon lo que hoy se conoce como motor Zend. Fundando la empresa Zend Technologies en Ramat Gan, Israel

En mayo del 2000, PHP 4 se lanzó utilizando el nuevo motor Zend 1.0.

En su versión 4.1, lanzada el 10 de diciembre de 2001, se introdujeron las variables superglobales ($_GET, $_POST, $_SESSION, etc)

En su versión 4.2, lanzada el 22 de abril de 2002, se deshabilitaron los register_globals por defecto

Los datos recibidos por la red ya no eran insertados en el espacio de nombres global, cerrando posibles agujeros de seguridad en las aplicaciones

En su versión 4.3, lanzada el 27 de diciembre de 2002, se introdujerón el CLI (una interfaz de línea de comandos), y el CGI (una interfaz común para la entrada de datos)

En su versión 4.4, lanzada el 11 de julio de 2005, se añadieron páginas de documentación man para phpize y php-config

El 13 de julio del 2007 se anunció la suspensión del soporte y desarrollo de la versión 4 de PHP

Sin embargo se liberó la nueva versión 4.4.8 con mejoras de seguridad, que se publicó el 13 de enero del 2008 y posteriormente la versión 4.4.9, que fue publicada el 7 de agosto del 2008

Y se le dio soporte a fallos críticos hasta el 9 de agosto del 2008

El 13 de julio del 2004, se lanzó PHP 5, utilizando el mejorado motor Zend Engine 2.0 (o Zend Engine 2)

En su versión 5.1, lanzada el 24 de noviembre de 2005, se añadieron mejoras de rendimiento con la introducción de las variables de compilador para su nuevo motor de PHP

En su versión 5.2, lanzada el 2 de noviembre de 2006, se añadió soporte nativo para JSON (tipo de objetos javascript)

En su versión 5.3, lanzada el 30 de junio de 2009, se añadió:

  • soporte para espacios de nombres
  • enlace estático en tiempo de ejecución
  • la etiqueta de salto (GOTO)
  • las clausuras nativas
  • soporte nativo para los archivos PHP (phar)
  • un recolector de basura para referencias circulares
  • soporte mejorado para Windows, sqlite3 y mysqlnd como reemplazo a libmysql como la biblioteca para las extensiones que funcionaba con la base de datos MySQL
  • la inclusión de fileinfo para reemplazar la función mime_magic para mejorar el soporte para las extensiones internacionales MIME y eliminar la obsoleta etiqueta ereg

En su versión 5.4, lanzada el 1 de marzo de 2012, se añadió soporte para Trait y una sintaxis abreviada de trabajar con arrays

Se eliminaron los siguientes elementos por ser considerados obsoletos: register_globals, safe_mode, allow_call_time_pass_reference, session_register(), session_unregister() y session_is_registered()

En su versión 5.5, lanzada el 20 de junio de 2013, se añadieron los nuevos generadores para bucles y la función empty() soporta expresiones

También se abandonó el soporte para Windows XP y Windows Server 2003

En su versión 5.6, lanzada el 20 de agosto de 2014, se añadieron las constantes con expresiones escalares, las listas de argumentos de longitud variable y el exponencial mediante el operador **

El desarrollo de PHP 6 fue retrasado porque los desarrolladores decidieron que el enfoque que se seguía para tratar las cadenas Unicode no era el correcto, y empezaron a tratar formas alternativas antes de lanzar esta versión

Todas las mejoras que estaban planeadas para PHP 6, en cambio, fueron añadidas en PHP 5.3.0 (el soporte para espacios de nombre, el enlace estático en tiempo de ejecución, las funciones lambda, las clausuras, la etiqueta GOTO) y en la 5.4.0 (traits, revinculación de clausuras)

Al final se abandonó definitivamente la versión 6 en favor de la 7

La versión 7.0, fue lanzada el 03 de noviembre de 2015, se añadieron mejoras de rendimiento y la declaración de los tipos de retorno para las funciones

En su versión 7.1, lanzada el 01 de diciembre de 2016, se añadieron el tipo de retorno null,​ el modificador de visibilidad de clase const, el tipo nullable, los iteneradores de tipo seudo, la captura de múltiples tipos de excepciones

En su versión 7.2, lanzada el 30 de noviembre de 2017, se añadió el nuevo tipo de retorno object y la integración de Libsodium como una extensión del núcleo

En su versión 7.3, lanzada el 6 de diciembre de 2018, se añadió una sintaxis flexible para Nowdoc y Heredoc, soporte para referencias y deconstrucción de arrays con list(), soporte para PCRE2, función hrtime()

La versión 7.4 fue lanzada el 28 de octubre de 2019 y llegó al final de su vida útil el 28 de noviembre de 2022

En su versión 8.0, lanzada el 26 de octubre de 2020, se añadieron nuevas características y se incremento su rendimiento

En su versión 8.1, lanzada el 25 de octubre de 2021, se añadieron las propiedades readonly, Enums, Fiber y nuevas sintaxis

En su versión 8.2, lanzada el 08 de diciembre de 2022, se añadió el atributo AllowDynamicProperties y se desaprobó la creación de propiedades dinámicas

Programación en PHP

Para poder utilizar PHP previamente deberemos instalarlo en nuestro servidor

Si además queremos utilizar una base de datos podemos usar conjuntamente con PHP el gestor de base de datos liviano Mysql

O si queremos una versión que lleve todo incluido, además de servidores adicionales como un servidor de correo, un servidor de ficheros o el interprete Tomcat para Java, podemos usar la distribución gratuita de Apache Friends, XAMPP

Una vez instalado nuestro servidor y el modulo de PHP está activo y configurado, podremos iniciar nuestros programas escritos en PHP en nuestras páginas Web

En el ejemplo se ha incrustado el código PHP en el propio HTML, pero esta no es la única forma en la que podremos incluirlo

Podemos ver que este sencillo script CGI no es igual a otro escrito en otro los lenguajes Perl o C

En vez de escribir un programa completo con todos los comandos necesarios para generar la salida HTML, escribimos directamente el código HTML con el código PHP embebido (incrustado) en el mismo HTML, lo que producirá la salida (en el ejemplo, producirá el texto que queremos que se muestre la etiqueta body)

Para incluir el código PHP deberemos utilizar las etiquetas especiales de comienzo <?php y final ?> que nos permitirán entrar y salir del interprete zend de PHP

Podemos usar 4 formas para salir de HTML y entrar en al interprete PHP:

  • usando las etiquetas de comienzo <?php y final ?>

  • usando la versión abreviada de las etiquetas de comienzo <? y final ?>

    A partir PHP 7 esta forma está obsoleta

  • usando la versión ASP de las etiquetas de comienzo <% y final %>

    A partir PHP 7 esta forma está obsoleta

  • adjuntando al documento HTML los comandos como un fichero de script

También podemos referenciar directamente un fichero con extensión .php el cuál podremos cargar dentro cualquier lugar del documento HTML mediante la función include

Sin embargo, abusar de esta práctica puede llegar a obligarnos a copiar una y otra vez la función include en todos nuestros ficheros HTML

Por esta razón se recomienta utilizar un archivo index.php que genere el HTML que recibirá el navegador y en el que se cargarán sólo los includes que la página necesite

Separación de las instrucciones

Al igual que en los lenguajes C o Pascal, las sentencias terminan usando el punto y coma

La etiqueta de cierre %> también implica el fin de la sentencia en el caso de que no haya más código PHP, por lo que en el ejemplo son equivalentes

Comentarios en PHP

PHP soporta comentarios tipo C, C++ o de Shell de Unix