Hi everyone! I'm the author of code.mu :)
I'd love to chat with my non-Russian audience. I'm looking for your feedback on the site and the translation quality. Let's chat:)
⊗jsSpAXFt 244 of 294 menu
◀ ▶

Fundamentos do uso do fetch em AJAX

Agora vamos ver como carregar parte de uma página usando AJAX. Vamos supor que na nossa página index.html haja uma div e um botão (aqui está o conteúdo da body):

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

Suponha que também tenhamos a página ajax.html, que contém três parágrafos (sem tags de página, apenas parágrafos):

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

Vamos fazer com que, ao clicar no botão na página index.html, o conteúdo da página ajax.html seja carregado dentro da div.

Para isso, primeiro vamos obter referências aos nossos elementos em variáveis:

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

Vamos adicionar um manipulador de evento de clique ao botão:

button.addEventListener('click', function() { // aqui faremos a requisição AJAX });

Agora vamos fazer a requisição AJAX. Para isso, usamos a função fetch, que recebe como parâmetro o endereço da página cujo conteúdo desejamos obter. Vamos especificar o endereço da página ajax.html no nosso servidor:

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

O resultado de fetch será uma Promise. Isso acontece porque fazer uma requisição de página via AJAX é uma operação assíncrona, pois levará algum tempo até que a página nos responda.

Vamos obter o resultado da Promise:

button.addEventListener('click', function() { let promise = fetch('/ajax.html'); promise.then(function(response) { // a resposta do servidor está na variável response }); });

Vamos simplificar, eliminando a variável desnecessária:

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

Vamos simplificar usando uma função arrow:

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

Vamos apresentar de uma forma mais legível:

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

A variável response contém um objeto bastante complexo da classe Response:

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

Estudaremos este objeto em profundidade nas próximas lições, mas por enquanto precisamos do mais básico - obter o texto da página solicitada. Para isso, existe o método text neste objeto. No entanto, este método não retorna o texto da página, mas uma Promise com seu texto:

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

Para acessar o texto da página, é necessário processar a Promise obtida de response.text mais uma vez:

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

Então, finalmente obtivemos o texto da página solicitada e podemos, por exemplo, inseri-lo na nossa div:

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

Existem três botões e uma div. No servidor, existem três páginas. Faça com que cada botão carregue na div a página correspondente.

Suponha que haja cinco páginas no servidor. Faça com que o primeiro clique no botão carregue a primeira página, o segundo clique - a segunda, e assim por diante, até que as páginas se esgotem.

← →
↑
Português▼
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nós usamos cookies para o funcionamento do site, análises e personalização. O processamento de dados é realizado de acordo com a Política de Privacidade.
aceitar todas configurar rejeitar