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.