⊗jsSpAXFt 244 of 294 menu

Fundamentos del uso de fetch en AJAX

Veamos ahora cómo cargar parte de una página usando AJAX. Supongamos que en nuestra página index.html hay un div y un botón (aquí se muestra el contenido de body):

<div></div> <button>click me</button>

Supongamos que también tenemos la página ajax.html, que contiene tres párrafos (sin etiquetas de página, solo párrafos):

<p>1</p> <p>2</p> <p>3</p>

Hagamos que al hacer clic en el botón en la página index.html, el contenido de la página ajax.html se cargue en el div.

Para ello, primero obtengamos referencias a nuestros elementos en variables:

let div = document.querySelector('div'); let button = document.querySelector('button');

Añadamos un controlador de clic al botón:

button.addEventListener('click', function() { // aquí realizaremos la solicitud AJAX });

Ahora realicemos la solicitud AJAX. Para esto se utiliza la función fetch, que recibe como parámetro la dirección de la página cuyo contenido queremos obtener. Especificamos la dirección de la página ajax.html en nuestro servidor:

button.addEventListener('click', function() { let result = fetch('/ajax.html'); });

fetch devolverá una promesa como resultado. El hecho es que solicitar una página mediante AJAX es una operación asíncrona, ya que pasará algún tiempo antes de que la página nos responda.

Obtengamos el resultado de la promesa:

button.addEventListener('click', function() { let promise = fetch('/ajax.html'); promise.then(function(response) { // la respuesta del servidor está en la variable response }); });

Simplifiquemos, eliminando la variable innecesaria:

button.addEventListener('click', function() { fetch('/ajax.html').then(function(response) { }); });

Simplifiquemos, usando una función flecha:

button.addEventListener('click', function() { fetch('/ajax.html').then(response => { }); });

Presentémoslo de una forma más legible:

button.addEventListener('click', function() { fetch('/ajax.html').then( response => { } ); });

La variable response contiene un objeto bastante complejo de la clase Response:

button.addEventListener('click', function() { fetch('/ajax.html').then(response => { console.log(response); // objeto de la clase Response }); });

Estudiaremos este objeto en profundidad en las siguientes lecciones, pero por ahora necesitamos lo más simple: obtener el texto de la página solicitada. Para esto, en este objeto existe el método text. Sin embargo, este método no devuelve el texto de la página, sino una promesa con su texto:

button.addEventListener('click', function() { fetch('/ajax.html').then( response => { console.log(response.text()); // mostrará Promise } ); });

Para obtener el texto de la página, es necesario procesar la promesa obtenida de response.text una vez más:

button.addEventListener('click', function() { fetch('/ajax.html').then( response => { return response.text(); } ).then( text => { console.log(text); // texto de la página } ); });

Finalmente, hemos obtenido el texto de la página solicitada y podemos, por ejemplo, insertarlo en nuestro div:

button.addEventListener('click', function() { fetch('/ajax.html').then( response => { return response.text(); } ).then( text => { div.innerHTML = text; } ); });

Se dan tres botones y un div. En el servidor hay tres páginas. Haz que cada uno de los botones cargue en el div la página correspondiente.

Supongamos que hay cinco páginas en el servidor. Haz que el primer clic en el botón cargue la primera página, el segundo clic - la segunda, y así sucesivamente, hasta que se acaben las páginas.

Español
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Usamos cookies para el funcionamiento del sitio, análisis y personalización. El procesamiento de datos se realiza de acuerdo con la Política de privacidad.
aceptar todas configurar rechazar