Introdução ao AJAX: Fundamentos, Exemplos e Cuidados

O AJAX, sigla para Asynchronous JavaScript and XML, é uma tecnologia fundamental na criação de páginas web interativas e dinâmicas. Ele permite que as páginas da web se comuniquem com o servidor em segundo plano, sem a necessidade de recarregar a página inteira. Isso proporciona uma experiência mais fluida e responsiva aos usuários, uma vez que apenas partes específicas da página são atualizadas conforme necessário. Neste artigo, exploraremos os fundamentos do AJAX, forneceremos exemplos práticos e discutiremos os cuidados ao usá-lo.

Fundamentos do AJAX

O AJAX é baseado em três tecnologias fundamentais:

  1. JavaScript: O JavaScript é a linguagem de programação que permite adicionar interatividade e funcionalidade às páginas da web. No contexto do AJAX, o JavaScript é usado para iniciar solicitações assíncronas ao servidor e manipular os dados retornados.
  2. XMLHttpRequest: O objeto XMLHttpRequest é o pilar do AJAX. Ele permite que o JavaScript faça solicitações HTTP assíncronas ao servidor. Com esse objeto, você pode enviar dados para o servidor, receber respostas e atualizar partes da página com base nas respostas.
  3. XML ou JSON: Inicialmente, o AJAX foi projetado para trabalhar com dados em formato XML. No entanto, o uso de JSON se tornou mais comum devido à sua simplicidade e eficiência. XML e JSON são usados para estruturar os dados transmitidos entre o servidor e o cliente.

Exemplos de Uso do AJAX

Agora, vamos explorar dois exemplos simples de uso do AJAX:

Exemplo 1: Carregamento de Conteúdo Assíncrono

Imagine um site de notícias que deseja carregar artigos adicionais quando o usuário rolar até o final da página, sem recarregar a página inteira. O AJAX torna isso possível. Aqui está um exemplo básico:

// Função para carregar mais artigos
function carregarMaisArtigos() {
  fetch("servidor.php?pagina=2")
    .then(response => {
      if (!response.ok) {
        throw new Error("Erro ao carregar os artigos.");
      }
      return response.text();
    })
    .then(novoConteudo => {
      // Atualizar a página com o novo conteúdo
      document.getElementById("conteúdo").innerHTML += novoConteúdo;
    })
    .catch(error => {
      console.error(error);
    });
}

Neste exemplo, utilizamos a função fetch para fazer uma solicitação GET assíncrona ao servidor. Quando a resposta é recebida com sucesso, o conteúdo é atualizado na página. Qualquer erro durante o processo é tratado e exibido no console.

Exemplo 2: Autenticação de Usuário

// Função para autenticar o usuário
function autenticarUsuario() {
  var username = document.getElementById("username").value;
  var password = document.getElementById("password").value;

  fetch("autenticacao.php", {
    method: "POST",
    headers: {
      "Content-Type": "application/x-www-form-urlencoded"
    },
    body: "username=" + username + "&password=" + password
  })
    .then(response => {
      if (response.ok) {
        // Usuário autenticado com sucesso
        alert("Autenticação bem-sucedida!");
      } else {
        // Falha na autenticação
        alert("Falha na autenticação. Verifique suas credenciais.");
      }
    })
    .catch(error => {
      console.error(error);
    });
}

Neste exemplo, utilizamos o fetch com um método POST para enviar os dados de autenticação para o servidor. Dependendo da resposta do servidor, uma mensagem de autenticação bem-sucedida ou uma mensagem de falha é exibida.

Lembre-se de que o código acima é apenas uma introdução ao uso do fetch para fazer solicitações AJAX. É importante continuar seguindo as melhores práticas, como tratamento de erros, segurança e considerações de desempenho, ao usar o fetch em projetos mais complexos.

Cuidados ao Usar o AJAX

Embora o AJAX seja uma ferramenta poderosa, é importante usá-lo com cuidado e considerar algumas práticas recomendadas:

  1. Progressive Enhancement: Certifique-se de que seu site ou aplicativo funcione mesmo quando o JavaScript estiver desativado. Use o AJAX para melhorar a experiência, não para torná-la essencial.
  2. Tratamento de Erros: Sempre trate erros adequadamente ao fazer solicitações AJAX. Isso inclui lidar com timeouts, respostas inesperadas e falhas de rede.
  3. Segurança: Proteja suas solicitações AJAX contra ataques de segurança, como Cross-Site Scripting (XSS) e Cross-Site Request Forgery (CSRF). Valide e sanitize os dados antes de enviá-los para o servidor.
  4. SEO: Lembre-se de que os mecanismos de busca podem ter dificuldade em indexar conteúdo carregado via AJAX. Certifique-se de que o conteúdo crítico seja acessível diretamente no HTML.
  5. Performance: Evite fazer muitas solicitações AJAX desnecessárias, pois isso pode afetar o desempenho do seu site. Agrupe solicitações sempre que possível e use o cache quando apropriado.

Em resumo, o AJAX é uma tecnologia essencial para criar páginas da web interativas e dinâmicas. Com a capacidade de enviar e receber dados do servidor de forma assíncrona, ele melhora significativamente a experiência do usuário. No entanto, é importante usá-lo com responsabilidade, seguindo as práticas recomendadas e considerando os aspectos de segurança e desempenho ao incorporá-lo em seus projetos web.

Gostaria de saber mais? De ujma olhada nas referencias e bons estudos

  1. Documentação Mozilla para Fetch:
  2. Livro online “You Don’t Know JS” (Capítulo sobre Fetch):
  3. Livro online “Eloquent JavaScript” (Capítulo sobre Fetch):
  4. W3Schools – Tutorial AJAX:
  5. SitePoint – A Guide to Fetch API:
  6. Artigo sobre Boas Práticas de AJAX:
  7. Artigo sobre Segurança em AJAX:

Esses recursos fornecem uma base sólida para entender e trabalhar com a API Fetch e o AJAX em JavaScript, bem como as melhores práticas associadas a essas tecnologias. Certifique-se de explorar esses materiais para aprofundar seus conhecimentos.

Como conectar na ViaCPE com JavaScript?

Este é um artigo rápido e prático que mostra que conectar-se ao ViaCEP usando JavaScript. O processo em si é simples, você pode fazer uma requisição HTTP GET para a API do ViaCEP com o CEP desejado e manipular a resposta retornada para obter os dados desejados.

Usando métodos encadeados

Você pode fazer isso usando a função fetch() do JavaScript ou outras bibliotecas de requisições HTTP como o Axios. Veja um exemplo usando a função fetch():

const cep = '01001000';
const url = `https://viacep.com.br/ws/${cep}/json/`;

fetch(url)
  .then(response => response.json())
  .then(data => {
    console.log(data);
    // Faça a manipulação dos dados retornados aqui
  })
  .catch(error => console.log(error));

Nesse exemplo, uma requisição HTTP GET é feita para a URL do ViaCEP com o CEP desejado inserido na URL. A resposta da API é convertida para o formato JSON usando o método json() e, em seguida, é possível manipular os dados retornados como um objeto JavaScript.

Lembre-se de tratar os erros que podem ocorrer durante a requisição HTTP e de ajustar a forma como os dados serão manipulados de acordo com a sua necessidade.

Usando Async/await

O async/await é uma forma mais moderna e simplificada de trabalhar com Promises, que são utilizadas nas requisições HTTP. Com o async/await, o código fica mais legível e fácil de entender.

Veja um exemplo de como buscar os dados do ViaCEP utilizando async/await:

async function getCEPData(cep) {
  try {
    const url = `https://viacep.com.br/ws/${cep}/json/`;
    const response = await fetch(url);
    const data = await response.json();
    console.log(data);
    // Faça a manipulação dos dados retornados aqui
  } catch (error) {
    console.log(error);
  }
}

getCEPData('01001000');

Nesse exemplo, a função getCEPData é definida como assíncrona com a palavra-chave async. Dentro da função, é criada a URL da API do ViaCEP com o CEP desejado e, em seguida, é feita a requisição HTTP GET utilizando o fetch. O await é utilizado para aguardar a resposta da API e a conversão da resposta para JSON. Em seguida, é possível manipular os dados retornados como um objeto JavaScript.

Lembre-se de utilizar a estrutura try/catch para tratar os erros que podem ocorrer durante a requisição HTTP.

Criando Pokedéx com React – Parte 1

Olá pessoal, hoje criaremos uma pokedex usando React e utilizando o PokeAPI para obter os dados dos pokémon. Para isso, precisamos entender sobre o fetch. Caso você não conheça o assunto, sugiro a leitura deste artigo. Mãos à obra.

Instalando React App

No seu prompt de comando (CMD), coloque o seguinte comando:

npm install –g create-react-app

Isso instalará o react-app globalmente. Agora, precisamos criar a pasta do projeto. Utilize o comando:

create-react-app pokedex

E, criada a pasta do projeto, entraremos nela:

cd pokedex

Você encontrará uma pasta chamada src dentro do seu arquivo pokedex. Exclua o arquivo logo.svg, ele não será utilizado.

Dentro da pasta src, criaremos uma pasta chamada test e outra pasta chamada components. Dentro da pasta components, crie uma pasta chamada styles.

Mova o arquivo App.js para a pasta components, o arquivo App.css para a pasta style. Mova o arquivo App.test.js para a pasta test.

Vamos aos códigos:

Abrindo o arquivo App.js e reescreva o conteúdo com o código a seguir:

import React, { Component } from 'react';
import './styles/App.css';
class App extends Component {
  render() {
    return (
      <div className="App">
        Ola Mundo
      </div>
    );
  }
}

export default App;

Agora, abra o seu arquivo App.css e delete o seu conteúdo. Ele será reescrito posteriormente.

No arquivo index.css, reescreva o conteúdo com o código a seguir:

* {
  box-sizing: border-box;
}

body {
  margin: 0;
  padding: 0;
  font-family: 'Avenir Next', sans-serif;
}

h1,
h2,
h3,
h4,
p {
  margin: 0;
}

Este arquivo contém todos os nossos estilos top-level. Removemos todas as margens das tags h1, h2, h3, h4 e p e também, queremos que os elementos tenham o tamanho do border-box.

No arquivo index.js, precisamos importar os componentes do React, ReactDOM e os componentes do nosso App.

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './components/App';
import * as serviceWorker from './serviceWorker';

ReactDOM.render(<App />, document.getElementById('root'));
serviceWorker.unregister();

Esse arquivo diz para o DOM renderizar o componente App no elemento com o ID “root”. O nosso componente APP conterá todos os componentes, que serão construídos. Para iniciar a aplicação, inicie com o comando:

npm start

E isso iniciará a nossa aplicação no navegador, então, toda vez que criarmos alterações no projeto. Se acontecer algum erro, o navegador exibirá informações sobre o erro.

Gostou? Fique atento aos próximos artigos!

Referências: https://blog.cloudboost.io/lets-build-a-pokedex-with-react-part-1-e1ba0b9387a7

Buscando dados de Geolocalização com IP-API

Olá pessoal. Neste artigo, irei mostrar como mostrar os dados advindos de um endereço IP utilizando o IP-API. Neste exemplo, iremos utilizar:

  • fetch;
  • async;
  • await.

Vamos lá?

Uma breve explicação sobre fetch:

O método fetch() fornece uma maneira fácil e rápida para buscar informações e recursos de uma forma assíncrona através da rede. Antes, essa funcionalidade era obtida com o XMLHttpRequest. O fetch() difere do jQuery.ajax(), principalmente nos quesitos de: A promise retornada do fetch() não rejeita status de erro HTTP, e só haverá rejeição se houver falha de rede ou impedimento da requisição ser completada e também o fetch() não envia nem recebe cookies do servidor.

Para mais informações sobre o fetch, acesse esse artigo.

Mãos à obra!

Para utilizarmos a IP-API, podemos acessar o site e sua documentação em:

https://ip-api.com/docs/api:json#test, onde é possível realizar testes, acessando os dados de diferentes IPs.

Ao código:

O primeiro passo é criarmos um documento HTML com um elemento <pre id=”json”></pre>:

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>fetch IP API</title>
</head>
<body>
    <pre id="json"></pre>
    <script src="scripts.js"></script>
</body>
</html>

Adicione uma tag script que aponta para um arquivo “scripts.js” (que será criado agora).

Criando o script:

Crie um arquivo scripts.js no seu editor de texto preferido. Com o arquivo criado, iremos começar a escrever uma função assíncrona chamada fetchIpApi(). A estrutura será a seguinte:

async function fetchIpApi(){}

Agora, iremos utilizar o método try…catch para realizar o teste de verificação de funcionamento da API.

  • A instrução try define o bloco de código a ser testado enquanto ele está sendo executado;
  • A instrução catch permite definir um bloco de código a ser executado se ocorrer algum erro no bloco try.
async function fetchIpApi(){
    try{
    } catch(err) {
    }
}

Ok, agora que temos nossos blocos try…catch definidos, iremos criar uma variável response que vai receber um await e o fetch(requisição) da Ip-API. Iremos capturar os dados do IP DNS do Google (8.8.8.8) (Caso você não saiba o que é async/await, leia este artigo)

async function fetchIpApi(){
    try{
        // Criando uma requisição da API
        let response = await fetch('http://ip-api.com/json/8.8.8.8?fields=61439');
    } catch (err){
    }
}

Feita a requisição, precisamos agora de uma resposta desta requisição. Para isso, utilizaremos o método response.json(), que retorna uma promise com o conteúdo transformado em arquivo json. Crie uma variável chamada usuário para isso e a retorne:

async function fetchIpApi(){
    try{
        let response = await fetch('http://ip-api.com/json/8.8.8.8?fields=61439');
        // Crie a variável usuário e pegue a resposta da requisição
        let usuario = await response.json();
        return usuario;
    } catch (err){
        console.log(err);
    }
}

No nosso tratamento de erro, apenas vamos mostrar no console a ocorrência de algum erro.

Agora, para mostrar o nosso arquivo JSON no HTML, iremos utilizar o método .then(), que:

  • Capturará o elemento HTML com id=”json”;
  • Utilizará o innerText para mostrar as informações em tela;
  • Receberá o arquivo formatado, utilizando o JSON.stringify().
fetchIpApi().then(
    // JSON.stringify(dado, undefined, 2) traz o conteúdo formatado!
    dado =>document.getElementById("json").innerText = JSON.stringify(dado, undefined, 2)
);

E esse será o resultado no seu navegador:

O código JavaScript completo:

async function fetchIpApi(){
    try{
        let response = await fetch('http://ip-api.com/json/8.8.8.8?fields=61439');
        let usuario = await response.json();
        return usuario;
    } catch (err){
        console.log(err);
    }
}

fetchIpApi().then(
    dado =>document.getElementById("json").innerText = JSON.stringify(dado, undefined, 2)
);

Gostou deste artigo? Comente abaixo!