{"id":1563,"date":"2024-08-02T07:23:20","date_gmt":"2024-08-02T05:23:20","guid":{"rendered":"https:\/\/blog.sutilweb.eu\/?page_id=1563"},"modified":"2024-08-02T07:23:20","modified_gmt":"2024-08-02T05:23:20","slug":"001-introduccion-a-ajax","status":"publish","type":"page","link":"https:\/\/sutilweb.eu\/index.php\/lenguajes\/javascript\/javascript-practico\/15-ajax\/001-introduccion-a-ajax\/","title":{"rendered":"001. Introducci\u00f3n a Ajax"},"content":{"rendered":"\n<p><strong>Ajax<\/strong> es un mecanismo que tiene <strong>Javascript<\/strong> para trabajar con la <strong>asincron\u00eda<\/strong> y hacer <strong>peticiones al lado del servidor<\/strong>. <strong>Ajax<\/strong> significa <strong>Asynchronous Javascript and XML<\/strong>, es decir, <strong>Javascript y XML as\u00edncrono<\/strong>. Hay que decir que el <strong>XML<\/strong> ha sido delegado por <strong>JSON<\/strong>. Antes se utilizaba para el intercambio de informaci\u00f3n, al tratarse de un <strong>lenguaje de marcado uniforme<\/strong>, cualquier <strong>lenguaje de programaci\u00f3n<\/strong> (<strong>PHP<\/strong>, <strong>Python<\/strong>, <strong>Java<\/strong>&#8230;) tiene <strong>m\u00e9todos<\/strong> para poder leer <strong>archivos JSON<\/strong> y <strong>archivos XML<\/strong>. A principios de la web, <strong>XML<\/strong> era el est\u00e1ndar de intercambio entre tecnolog\u00edas.<\/p>\n\n\n\n<p>Al inicio, <strong>Ajax<\/strong> comenz\u00f3 trabajando con <strong>XML<\/strong> para la carga del nuevo contenido.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Modelo tradicional de una aplicaci\u00f3n web<\/h2>\n\n\n\n<p>La <strong>aplicaci\u00f3n<\/strong> se aloja en el navegador web del usuario, el <strong>servidor<\/strong> le entrega al navegador <strong>c\u00f3digo front<\/strong> (<strong>HTML<\/strong>, <strong>CSS<\/strong>, <strong>Javascript<\/strong>, <strong>multimedia<\/strong>), el usuario, cuando por ejm accede a un <strong>login<\/strong>, env\u00eda datos mediante un formulario, o pide otra p\u00e1gina web, lo que hace es una petici\u00f3n por el protocolo <strong>HTTP<\/strong> o <strong>HTTPS<\/strong> (el protocolo est\u00e1ndar en la actualidad), y dependiendo de lo que haga esa petici\u00f3n web, se pueden hacer transacciones con <strong>bases de datos<\/strong>, con <strong>microservicios<\/strong>&#8230; hace los procesos y posteriormente se env\u00edan los datos al <strong>navegador<\/strong>. Esto hace que cada vez que solicitamos un <strong>recurso<\/strong> al <strong>servidor<\/strong>, se tiene que recargar el <strong>navegador<\/strong>, aqu\u00ed es donde entra en juego <strong>Ajax<\/strong>, que lo que hace es colocarse como un motor el cual es un intermediario entre la interfaz de usuario del <strong>navegador<\/strong> y el <strong>servidor<\/strong>, con lo que, sin necesidad de recargar el <strong>navegador web<\/strong>, el <strong>servidor<\/strong> entrega informaci\u00f3n al <strong>cliente<\/strong> que en este caso es el <strong>usuario<\/strong> y su <strong>navegador web<\/strong>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Nota: Ajax<\/strong> fue creado por personal de <strong>Microsoft<\/strong> cuando <strong>Internet Explorer<\/strong> era el navegador m\u00e1s usado en el mundo.<\/p>\n<\/blockquote>\n\n\n\n<p>El atractivo de <strong>Ajax<\/strong> reside en su <strong>naturaleza as\u00edncrona<\/strong>, ya que para enviar y recibir informaci\u00f3n se puede utilizar <strong>JSON<\/strong>, <strong>XML<\/strong>, <strong>HTML<\/strong> plano&#8230; y <strong>Ajax<\/strong> nos permite comunicar con el <strong>servidor<\/strong>, intercambiar datos y actualizar la interfaz del usuario sin la necesidad de recargar el navegador.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">M\u00e9todos<\/h2>\n\n\n\n<p>Disponemos de 3 <strong>m\u00e9todos<\/strong> nativos para poder hacer <strong>Ajax<\/strong>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><em>ActiveXObject<\/em><\/strong>: es un objeto exclusivo de <strong>Internet Explorer 8<\/strong> e inferiores, el cual est\u00e1 obsoleto.<\/li>\n\n\n\n<li><strong><em>XMLHttpRequest<\/em><\/strong>: es el objeto que describe <strong>Ajax<\/strong>, el cual es utilizado por todos los navegadores.<\/li>\n\n\n\n<li><strong>API <em>Fetch<\/em><\/strong>:\u00a0 es una forma moderna de hacer <strong>Ajax<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Librer\u00edas externas<\/h2>\n\n\n\n<p>Existen <strong>librer\u00edas externas<\/strong> para el uso de <strong>Ajax<\/strong>, como son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>jQuery<\/strong>: es la librer\u00eda muy popular, la cual est\u00e1 dando los \u00faltimos coletazos.<\/li>\n\n\n\n<li><a href=\"https:\/\/axios-http.com\/es\/docs\/intro\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Axios<\/strong><\/a>: es una librer\u00eda que se ha vuelto muy popular, est\u00e1 basada en <strong>promesas<\/strong>. Es un cliente de peticiones <strong>HTTP<\/strong>\/<strong>HTTPS<\/strong> basado en <strong>promesas<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">No es s\u00f3lo una tecnolog\u00eda<\/h2>\n\n\n\n<p><strong>Ajax<\/strong> no es una tecnolog\u00eda en s\u00ed misma, hay una interacci\u00f3n de muchas tecnolog\u00edas, del <strong>cliente<\/strong>, del <strong>servidor<\/strong>, se trata de un conjunto de tecnolog\u00edas que se unen en un todo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>HTML<\/strong> y <strong>CSS<\/strong> para crear presentaciones basadas en est\u00e1ndares.<\/li>\n\n\n\n<li><strong>DOM<\/strong> para la interacci\u00f3n y manipulaci\u00f3n din\u00e1mica de la presentaci\u00f3n.<\/li>\n\n\n\n<li><strong>HTML<\/strong>, <strong>XML<\/strong> o <strong>JSON<\/strong> para el intercambio y la manipulaci\u00f3n de informaci\u00f3n.<\/li>\n\n\n\n<li><strong><em>XMLHttpRequest<\/em> <\/strong>o <strong><em>Fetch<\/em> <\/strong>para el intercambio as\u00edncrono de informaci\u00f3n.<\/li>\n\n\n\n<li><strong>Javascript<\/strong> para unir todas las dem\u00e1s tecnolog\u00edas.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Estados de una petici\u00f3n<\/h2>\n\n\n\n<p>Los estados de una petici\u00f3n as\u00edncrona pueden ser los siguientes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>READY_STATE_UNINITIALIZED = 0<\/li>\n\n\n\n<li>READY_STATE_LOADING = 1<\/li>\n\n\n\n<li>READY_STATE_LOADED = 2<\/li>\n\n\n\n<li>READY_STATE_INTERACTIVE = 3<\/li>\n\n\n\n<li>READY_STATE_COMPLETE = 4<\/li>\n<\/ul>\n\n\n\n<p>En estos cap\u00edtulos van a cobrar mucho protagonismo lo que se vio en su momento referente a <strong>peticiones as\u00edncronas<\/strong> (<strong>promesas<\/strong>, <strong>callbacks<\/strong>, <strong>Async<\/strong>&#8230; <strong>Await<\/strong>&#8230;). Es muy importante entender que una petici\u00f3n de <strong>Ajax<\/strong> del objeto <strong><em>XMLHttpRequest<\/em> <\/strong>va a tener 4 estados, el estado de <strong>no inicializaci\u00f3n<\/strong>, donde el cliente se empieza a comunicar con el servidor (<strong><em>READY_STATE_UNINITIALIZED<\/em><\/strong>), un <strong>estado de cargando<\/strong>, donde se est\u00e1n enviando los datos al servidor (<strong><em>READY_STATE_LOADING<\/em><\/strong>), un <strong>estado de cargado<\/strong>, en el cual el <strong>servidor<\/strong> respondi\u00f3 al <strong>cliente<\/strong> pero el <strong>cliente<\/strong> todav\u00eda no tiene la informaci\u00f3n lista para que nosotros comencemos a interactuar (<strong><em>READY_STATE_LOADED<\/em><\/strong>), una <strong>fase de estado interactivo<\/strong>, donde el motor de <strong>Javascript<\/strong> tiene acceso a los datos de esta petici\u00f3n (<strong><em>READY_STATE_INTERACTIVE<\/em><\/strong>) y finalmente cuando ha terminado todo el proceso de que el objeto <strong><em>XMLHttpRequest<\/em> <\/strong>hace la petici\u00f3n, el <strong>servidor<\/strong> le responde y ya tiene los datos listos para que nosotros los manipulemos y mostremos la informaci\u00f3n (<strong><em>READY_STATE_COMPLETE<\/em><\/strong>).<\/p>\n\n\n\n<p>Estos estados son muy importantes, y tomar\u00e1n gran relevancia en el siguiente cap\u00edtulo, donde comenzaremos a trabajar con el objeto <strong><em>XMLHttpRequest<\/em><\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3digos de estado de respuesta<\/h2>\n\n\n\n<p>Como se trata de una interacci\u00f3n entre el <strong>cliente<\/strong> y el <strong>servidor<\/strong>, es muy importante entender los <a href=\"https:\/\/developer.mozilla.org\/es\/docs\/Web\/HTTP\/Status\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>c\u00f3digos de estado de respuesta<\/strong><\/a> del <strong>protocolo HTTP<\/strong>. Existen 5 tipos de mensajes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>C\u00f3digos 100 (100-199)<\/strong>: se trata de respuestas informativas.<\/li>\n\n\n\n<li><strong>C\u00f3digos 200 (200-299)<\/strong>: se trata de respuestas satisfactorias.<\/li>\n\n\n\n<li><strong>C\u00f3digos 300 (300-399)<\/strong>: se trata de redirecciones.\n<ul class=\"wp-block-list\">\n<li><strong>301<\/strong>: Redirecci\u00f3n permanente<\/li>\n\n\n\n<li><strong>302<\/strong>: Redirecci\u00f3n moment\u00e1nea<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>C\u00f3digos 400 (400-499)<\/strong>: se trata de errores de los clientes.\n<ul class=\"wp-block-list\">\n<li><strong>401<\/strong>: No autorizado<\/li>\n\n\n\n<li><strong>403<\/strong>: Forbidden<\/li>\n\n\n\n<li><strong>404<\/strong>: Not found<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>C\u00f3digos 500 (500-599)<\/strong>: se trata de errores de los servidores.\n<ul class=\"wp-block-list\">\n<li><strong>502<\/strong>: M\u00e1ximo de ancho de banda.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Cuando realizamos una solicitud, los <strong>c\u00f3digos 200<\/strong> son los tipos de mensajes que estamos esperando recibir del servidor. Por lo tanto vamos a trabajar mucho con los <strong>c\u00f3digos 200<\/strong> y con los <strong>c\u00f3digos 500<\/strong>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Nota<\/strong>: es muy importante familiarizarse con este tipo de mensajes.<\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Ajax es un mecanismo que tiene Javascript para trabajar con la asincron\u00eda y hacer peticiones al lado del servidor. Ajax [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1561,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-1563","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Sutil Web","author_link":"https:\/\/sutilweb.eu\/index.php\/author\/sutilweb\/"},"uagb_comment_info":0,"uagb_excerpt":"Ajax es un mecanismo que tiene Javascript para trabajar con la asincron\u00eda y hacer peticiones al lado del servidor. Ajax [&hellip;]","_links":{"self":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1563","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/comments?post=1563"}],"version-history":[{"count":2,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1563\/revisions"}],"predecessor-version":[{"id":1565,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1563\/revisions\/1565"}],"up":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1561"}],"wp:attachment":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/media?parent=1563"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}