Olá, tudo bem?!

Realizar uma requisição AJAX não precisa ser uma coisa de outro mundo, muito pelo contrário é algo bem comum e amplamente utilizado.

Normalmente é realizado a implementação fazendo uso de alguma biblioteca Javascript.

Neste post irei demonstrar de forma simples uma requisição AJAX para a API SWAPI (Star Wars API) e consumir seu retorno na página HTML.

Crie um arquivo HTML com o nome ajax-javascript.html, dentro do mesmo insira a seguinte estrutura de código.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <title>Requisição AJAX</title>
</head>
<body>
    <input class='input-id' type="text" name='id' placeholder="1-15">
    <button onclick="sendRequest()">Send Request</button>
    <p id='error-container' style='color:red;'>
    <p>
        Name: <span id='name'>    
    
    <p>
        Gravity: <span id='gravity'>    
    
    <p>
        Population: <span id='population'>    
    
    <p>
        Rotation Period: <span id='rotation-period'>    
    
    <script>
        // os códigos javascript serão inserídos aqui!
    </script>
</body>
</html>

Dentro da tag script devemos criar a função sendRequest(), onde será executado com o click do botão.

1
2
3
function sendRequest(){
  // implementação aqui dentro.
}

Devemos capturar o input, pois por meio dele iremos obter o valor numérico para pesquisa na API.

1
var id = document.querySelector('.input-id');

Daremos início a request AJAX, e para isso será utilizado a API XMLHttpRequest.

1
2
// uso da API para fornecer acesso a realizar requests ao servidor
var xhttp = new XMLHttpRequest();

Agora temos acesso ao método onreadystatechange,  ele é executado sempre que o atributo readyState for alterado, lembrando que durante a request AJAX ele passa por diversos states.

1
2
3
xhttp.onreadystatechange = function() {
  // implementação do tratamento da request.
}

Devemos validar agora o status code e o state de retorno para poder executar as ações somente após “OK”.

1
2
3
4
5
// readyState = 4   - referente a request concluida
// status     = 200 - referente ao status code http 'OK'
if (this.readyState == 4 && this.status == 200) {
    // implementações do tratamento aqui.
}

Para coletar a response é simples, veja abaixo a implementação.

1
2
3
// responsável por coletar a resposta. 
var response = this.responseText; 
var result = JSON.parse(response);

O parse do json é necessário para que possamos manipular o retorno, devemos agora inserir o resultado em seus respectivos lugares no  HTML.

1
2
3
4
5
// preenchimento do resultado no HTML
document.getElementById("name").innerHTML = result.name;
document.getElementById("gravity").innerHTML = parseInt(result.gravity);
document.getElementById("population").innerHTML = result.population;
document.getElementById("rotation-period").innerHTML = result.rotation_period;

Em seguida devemos configurar o tipo de request e seu envio, para isso devemos inserir os código a seguir fora da estrutura xhttp.onreadystatechange.

1
2
3
4
5
6
// URL da API
var url = 'https://swapi.co/api/planets/'+id.value;
// configuração para request
xhttp.open("GET", url, true);
// envio da request
xhttp.send();

Preparamos a URL da API, abrimos a request informando que será utilizado o método GET, por fim disparamos a ação.

Somente com as implementações acima nosso sistema encontra-se pronto para uso, abra o arquivo HTML em seu navegador de preferência e teste o resultado obtido.

Podemos aplicar um requinte de elegância e tratar quando a request não for “OK”, ou seja, não retorna o esperado.

Devemos implementar dentro da estrutura xhttp.onreadystatechange ao final de sua implementação a seguinte estrutura de código.

1
2
3
4
// Responsável por tratar o retorno que não for bem sucedido
if (this.readyState == 4 && this.status !== 200){
     document.getElementById("error-container").innerHTML = 'Data not found!';
}

O código acima basicamente valida qualquer request que não seja bem sucedida, inserindo a mensagem de erro que desejamos.

Abaixo segue o código completo para consulta.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function sendRequest(){
    var id = document.querySelector('.input-id');

    // uso da API para fornecer acesso a realizar requests ao servidor
    var xhttp = new XMLHttpRequest();
    // esta função é chamado sempre que o atributo readyState sofre alteração
    xhttp.onreadystatechange = function() {
        // readyState = 4   - referente a request concluida
        // status     = 200 - referente ao status code http 'OK'
        if (this.readyState == 4 && this.status == 200) {
           // responsável por coletar a resposta. 
           var response  = this.responseText;
           var result    = JSON.parse(response);
           // preenchimento do resultado no HTML
           document.getElementById("name").innerHTML            = result.name;
           document.getElementById("gravity").innerHTML         = parseInt(result.gravity);
           document.getElementById("population").innerHTML      = result.population;
           document.getElementById("rotation-period").innerHTML = result.rotation_period;
        }

        // Responsável por tratar o retorno que não for bem sucedido
        if (this.readyState == 4 && this.status !== 200){
            document.getElementById("error-container").innerHTML = 'Data not found!';    
        }
    };
    // URL da API
    var url = 'https://swapi.co/api/planets/'+id.value;
    // configuração para request
    xhttp.open("GET", url, true);
    // envio da request
    xhttp.send();
}

Com poucas linhas de código, foi realizado uma função para requisição AJAX e inserindo o resultado dentro da página HTML.

As validações implementadas foram superficiais, porém é possível ampliar a camada conforme a necessidade do projeto.

Espero que tenham apreciado o conteúdo, e que agregue valor em seu dia a dia.

Grande abraço e sucesso em seus projetos.