Pular para o conteúdo
murad.guide

JavaScript

Capítulo 28

Fetch com JSON local

2 min de leitura 392 palavras 1 gravura

fetch lê oficinas.json. Sirva em 127.0.0.1. file:// costuma falhar.

Trabalhe sobre uma cópia da pasta inicio do exemplo correspondente. Leia, digite, mude uma coisa, preveja o resultado, recarregue e confira. A referência completa fica na raiz da pasta do exemplo, no pacote anexo.

O que você pratica

Diagrama: Fetch com JSON local

Servidor local

python -m http.server 8770 --bind 127.0.0.1 --directory curso

Abra http://127.0.0.1:8770/exemplos/28-fetch/.

fetch

fetch("oficinas.json"), confira resp.ok, depois resp.json().

file://

Abrir como arquivo costuma bloquear o fetch. Use o servidor.

Ler o exemplo completo

A referência desta etapa usa app.js, index.html, oficinas.json, styles.css. Abra primeiro o resultado pronto e identifique onde acontece servidor local. Depois compare o mesmo ponto com a pasta inicio. Essa comparação mostra exatamente o que você precisa escrever, sem esconder partes indispensáveis do programa.

Diagnóstico guiado

Se o resultado não aparecer, confirme o arquivo aberto, salve a alteração e recarregue. Em seguida, abra o Console: leia a primeira mensagem de erro, confira o nome do arquivo e a linha indicada. Quando houver fetch, sirva a pasta apenas em 127.0.0.1; abrir por file:// não reproduz o pedido HTTP.

Critério de avanço

Avance quando conseguir explicar o papel de inicio, realizar uma mudança pequena e restaurar o exemplo sem copiar a resposta comentada.

Atividades

  1. Na referência, onde aparece servidor local e qual efeito você observa?
  2. Na cópia inicio, mude apenas inicio. O que você prevê antes de executar novamente?
  3. Provoque uma falha pequena nesta etapa. Qual mensagem ou comportamento ajudou você a encontrar a causa?

Respostas comentadas

Só abra depois de tentar.

Atividade 1. A resposta deve apontar o arquivo e ligar o trecho ao efeito visível. Compare com app.js, index.html, oficinas.json, styles.css.

Atividade 2. Registre o valor anterior, o novo valor e o resultado previsto. Depois confira; se houver diferença, explique o que o programa realmente fez.

Atividade 3. Uma boa investigação começa pela primeira mensagem do Console, pelo arquivo salvo e pelo caminho aberto. Corrija uma causa por vez e execute de novo.

Exemplo deste capítulo: pacote de exemplos/28-fetch/.

O arquivo completo

Referência do exemplo 28-fetch, reproduzida aqui para que você possa conferir sem sair da página.

index.html

<!DOCTYPE html>
<html lang="pt-BR">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Fetch com JSON local — Ateliê do Marco Zero</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <a class="skip" href="#conteudo">Ir para o conteúdo</a>
  <header>
    <p class="tag">Ateliê do Marco Zero · Recife</p>
    <h1>Fetch com JSON local</h1>
  </header>
  <main id="conteudo">
    <p>Este exemplo lê <code>oficinas.json</code>. Sirva a pasta em <code>127.0.0.1</code>.</p>
    <button type="button" id="carregar">Carregar oficinas</button>
    <ul class="lista" id="lista"></ul>
    <p id="erro" class="erro" hidden></p>

  </main>
  <footer>
    <p>Material de estudo. Conteúdo fictício. Servidor só em 127.0.0.1.</p>
  </footer>
  <script src="app.js"></script>
</body>
</html>

app.js

const lista = document.querySelector("#lista");
const erro = document.querySelector("#erro");

document.querySelector("#carregar").addEventListener("click", async () => {
  erro.hidden = true;
  lista.innerHTML = "";
  try {
    const resp = await fetch("oficinas.json");
    if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
    const dados = await resp.json();
    dados.forEach((o) => {
      const li = document.createElement("li");
      li.textContent = `${o.nome} · ${o.horario} · ${o.vagas} vagas`;
      lista.appendChild(li);
    });
  } catch (e) {
    erro.hidden = false;
    erro.textContent = "Falha ao ler JSON. Confira o servidor em 127.0.0.1.";
    console.error(e);
  }
});