Habiendo seguido los tres tutoriales anteriores, debería haber adquirido un buen conocimiento de AJAX. En este último tutorial, resumiremos las cosas trabajando con un ejemplo más complejo..
Para tener una idea de la estructura de este ejemplo, considere el siguiente marcado:
El marcado para el principal
el elemento se muestra a continuación:
Marcos frontales populares
Haga clic en cada uno para cargar los detalles a través de AJAX.
Bootstrap Foundation UIkit Semantic UI Skeleton Material Design Lite
Observe los enlaces de texto. Estos corresponden a diferentes marcos frontales. Como veremos en la siguiente sección, cada vez que hacemos clic en los enlaces, se ejecutará una solicitud AJAX. Entonces, el elemento con la clase de modal
aparecerá y su contenido se actualizará con los datos obtenidos de la respuesta.
Así es como el principal
elemento se ve como
El siguiente paso es examinar la estructura de nuestro modal. Aquí está el código HTML:
- Marco de referencia
- Versión actual
- Número de estrellas Github
- Página Oficial
Como puedes ver, el modal contiene algunos elementos vacíos. Los colocamos en el HTML porque su texto cambiará según el enlace en el que hagamos clic y la respuesta que obtengamos..
La siguiente imagen muestra cómo aparece inicialmente el modal:
Por defecto, el modal está oculto. Además, también ocultaremos el cargador. Esto aparecerá solo cuando se active la solicitud AJAX.
Echa un vistazo a las reglas CSS correspondientes:
.modal opacidad: 0; .loader mostrar: ninguno;
Tenga en cuenta que usamos el opacidad
propiedad (y no la monitor
propiedad) para ocultar el modal porque esta propiedad pertenece a las propiedades animables de CSS. De esta manera, podremos hacer una transición de los estados del modal (es decir, los estados abierto y cerrado).
Para los propósitos de este ejemplo, elegiremos compilar nosotros mismos la respuesta JSON. Específicamente, la respuesta esperada (es decir, la Demo.json
archivo) será una matriz de objetos. Cada objeto contendrá detalles sobre los marcos front-end relacionados.
Por otra parte, el valor de la nombre
propiedad coincidirá con los enlaces de texto de la principal
Elemento (ver apartado anterior). Con eso en mente, la estructura de la respuesta se ve algo como esto:
["url": "http://getbootstrap.com/", "numberOfStars": "88.260+", "currentVersion": "3.3.5", "name": "Bootstrap", "url": "http://foundation.zurb.com/", "numberOfStars": "21.180+", "currentVersion": "5.5.3", "name": "Foundation", // 4 objetos más aquí]
Nota: Los valores que hemos usado para el numberOfStars
y versión actual
Las propiedades son falsas y puramente con fines de demostración..
Al igual que en los ejemplos anteriores de esta serie, usaremos AJAX para solicitar un archivo estático. Sin embargo, si queremos insertar contenido proveniente de otros sitios (por ejemplo, Google Maps, Flickr), deberíamos leer su documentación de API y, si es necesario, solicitar una clave de API.
Además, nuestros datos de destino se encuentran en el mismo servidor que la página de demostración. Por lo tanto, evitaremos las limitaciones que pueden surgir al interactuar con servicios de terceros (consulte la sección "Limitaciones de las solicitudes de AJAX" del primer tutorial).
En esta sección, usaremos jQuery. ajax
Función para inicializar una solicitud AJAX. Antes de hacerlo, primero definamos nuestras variables almacenando en la memoria caché los selectores jQuery más utilizados:
var $ list = $ ('. m-info'), var $ message = $ ('. m-message'); var $ modal = $ ('. modal'); var $ loader = $ ('. loader'); var $ framework;
Ahora es el momento de examinar el código responsable de la ejecución de la solicitud:
$ ('. boxes a'). on ('click', function (e) e.preventDefault (); $ framework = $ (this) .text (); $ .ajax (url: 'Demo.json' , dataType: 'json', beforeSend: function () $ loader.show ();). done (successFunction) .fail (errorFunction) .always (alwaysFunction););
Notarás la sintaxis de la ajax
La función se ve de la siguiente manera:
$ .ajax ([configuración])
los ajustes
parámetro es un objeto de configuración que contiene información sobre nuestra solicitud. El número de propiedades que puede tener este objeto es muy largo (alrededor de 34 propiedades). En aras de la simplicidad, solo discutiremos aquellos que se utilizan en esta demostración. Más específicamente:
Propiedad | Descripción |
---|---|
url | Una cadena que contiene la URL a la que se envía la solicitud. |
tipo de datos | El formato de los datos de respuesta (por ejemplo,. json , xml , html ). |
antesEnviar | Una función de devolución de llamada que se ejecuta antes de que enviemos la solicitud. Aquí, esta función activa el código que muestra el cargador.. |
Antes de continuar, vale la pena mencionar tres cosas:
ajax
función: $ .ajax (url [, configuración])
ajustes
los parámetros son opcionales.OBTENER
.los ajax
La función devuelve el objeto jQuery XMLHttpRequest o jqXHR. Este objeto implementa la interfaz de Promesa y, por lo tanto, contiene todas las propiedades, métodos y comportamiento de una Promesa..
En este ejemplo, usamos los siguientes métodos de promesa:
hecho
fallar
siempre
los hecho
método se dispara si la solicitud tiene éxito. Recibe uno o más argumentos, todos los cuales pueden ser una sola función o una serie de funciones. Por ejemplo, en nuestra demo, la successFunction ()
se pasa como un argumento.
La función de devolución de llamada (por ejemplo,. successFunction ()
) acepta tres argumentos. Primero, los datos devueltos. En segundo lugar, una cadena que categoriza el estado de la solicitud (consulte el artículo anterior para conocer sus posibles valores). Por último, el objeto jqXHR..
los fallar
Se llama al método si la solicitud falla. Recibe uno o más argumentos, todos los cuales pueden ser una sola función o una serie de funciones. Por ejemplo, en nuestra demo, la errorFunction ()
se pasa como un argumento.
La función de devolución de llamada (por ejemplo,. errorFunction ()
) acepta tres argumentos: el objeto jqXHR, una cadena que categoriza el estado de la solicitud y otra cadena que especifica el error resultante. Este error recibe la parte textual del estado HTTP, como Extraviado
o Prohibido
.
los siempre
El método se ejecuta cuando finaliza la solicitud, independientemente del éxito (es decir, el hecho
método se ejecuta) o falla (es decir, el fallar
método se ejecuta) de ello. Nuevamente, recibe como argumento una función única o una matriz de funciones. Por ejemplo, en nuestra demo, la alwaysFunction ()
se pasa como un argumento.
El estado de la solicitud especifica los argumentos de la función. En caso de una solicitud exitosa, la devolución de llamada (por ejemplo,. alwaysFunction ()
) recibe los mismos argumentos que la devolución de llamada de la hecho
método. Por el contrario, si la solicitud falla, acepta los mismos argumentos que la devolución de llamada del fallar
método.
Nota: En vez de hecho
, fallar
, y siempre
Los métodos de promesa que se utilizan en este ejemplo, también podríamos haber utilizado el éxito
, error
, y completar
Funciones de devolución de llamada. Estas funciones se definen en el ajustes
parámetro.
Si la solicitud es exitosa, podemos recuperar los datos de respuesta. Luego, lo manipulamos para rellenar los elementos vacíos del modal..
Considere el código para el éxitoFunción
llamar de vuelta:
function successFunction (data) if (data.length> 0) for (var i = 0; i < data.length; i++) if ($framework === data[i].name) $list.show(); $message.hide(); $list.find('li:nth-of-type(2)').text($framework); $list.find('li:nth-of-type(4)').text(data[i].currentVersion); $list.find('li:nth-of-type(6)').text(data[i].numberOfStars); $list.find('li:nth-of-type(8)').html('' + data[i].url + ''); break; else $list.hide(); $message.show().text('No data received for this framework!'); else $list.hide(); $message.text('No data received from your respose!');
Aunque hemos actualizado el contenido de nuestro modal, esto todavía está oculto. Se vuelve visible y el cargador desaparece cuando finaliza la solicitud. Sólo entonces, el siemprefunción
La devolución de llamada se ejecuta:
function alwaysFunction () $ loader.hide (); $ modal.addClass ('activo');
los activo
clase se ve así:
.activa opacidad: 1; índice z: 10; transformar: escala (1);
A continuación puede ver la apariencia esperada del modal si hacemos clic en el botón Oreja
enlace de texto:
Es importante entender el código que se ejecuta en ciertas circunstancias. Vamos a cubrir dos escenarios comunes:
nombre
propiedad no coincide con los enlaces de texto de la principal
elemento. Por ejemplo, supongamos que definimos una URL donde el valor de la nombre
propiedad del objeto que está relacionado con el marco de la Fundación es Fundación2
en lugar de Fundación
. En tal caso, si pulsamos sobre el Fundación
enlace de texto, aparecerá el siguiente modal:Por lo tanto, hemos cubierto el código que se activa cuando la solicitud se realiza correctamente. ¿Pero qué pasa si la solicitud falla? En el caso de una solicitud fallida, ocultamos la lista y mostramos un mensaje personalizado.
Aquí está el código de la FailFunction ()
lo que demuestra ese comportamiento:
function failFunction (request, textStatus, errorThrown) $ list.hide (); $ message.text ('Ocurrió un error durante su solicitud:' + request.status + "+ textStatus +" + errorThrown);
Para familiarizarnos con este código, especificamos una URL que no existe. Por lo tanto, la fallar
El método se activará y se mostrará el siguiente modo:
Nota: De nuevo, el mensaje de error puede ser diferente si ejecuta este ejemplo localmente.
Aquí está la demostración incrustada de Codepen:
En este tutorial, concluimos nuestro examen de AJAX desde la perspectiva de un diseñador web: ¡bien hecho para seguirlo! Espero que hayas encontrado útil esta serie y hayas aprendido nuevas habilidades..
Como siguiente paso, te animo a examinar las siguientes cosas:
$ .getJSON
método).