Aula 4

JavaScript Avançado

Interação com o Servidor

Por que a interação com o servidor é necessária?

Aplicações modernas precisam buscar dados de bancos de dados, validar informações, autenticar usuários e salvar alterações. Para isso, é fundamental a comunicação entre cliente (navegador) e servidor.

Exemplos

Solicitações: Síncronas x Assíncronas

Uma solicitação síncrona bloqueia a execução do código até o servidor responder. Já uma solicitação assíncrona permite que o restante do programa continue rodando.

Exemplo Síncrono (não recomendado)

let xhr = new XMLHttpRequest();
xhr.open("GET", "dados.json", false); // false = síncrono
xhr.send();
console.log(xhr.responseText); // bloqueia até terminar
Exemplo Assíncrono

let xhr = new XMLHttpRequest();
xhr.open("GET", "dados.json", true); // true = assíncrono
xhr.onload = function() {
  console.log(xhr.responseText);
};
xhr.send();

O que é HTTP?

HTTP (HyperText Transfer Protocol) é o protocolo que define como o cliente e o servidor se comunicam na web.

Princípios básicos do HTTP

Request e Response

Métodos HTTP

Exemplo GET com Fetch

fetch("https://api.exemplo.com/produtos")
  .then(resp => resp.json())
  .then(dados => console.log(dados));

Códigos de Resposta HTTP

XMLHttpRequest

O XMLHttpRequest (XHR) é um objeto usado para enviar e receber dados de um servidor de forma assíncrona.

Metas e Objetivos

Métodos e Propriedades

Exemplo POST com XHR

let xhr = new XMLHttpRequest();
xhr.open("POST", "/api/cadastro");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onload = () => console.log(xhr.responseText);
xhr.send(JSON.stringify({ nome: "João", idade: 30 }));

Casos práticos de uso

API Fetch

O fetch é uma API moderna e mais simples para requisições HTTP, substituindo o uso de XMLHttpRequest.

Metas e Objetivos

Exemplo GET

fetch("/api/usuarios")
  .then(resp => resp.json())
  .then(dados => console.log(dados));
Exemplo POST

fetch("/api/cadastro", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ nome: "Maria", idade: 22 })
})
.then(resp => resp.json())
.then(dados => console.log(dados));

Casos práticos de uso