Carregando JSON com XMLHttpRequest - JavaScript
O JSON é um dos formatos mais populares para armazenamento e transmissão de dados. Ele é frequentemente usado para transferir dados por meio de requisições AJAX. Para obter JSON usando XMLHttpRequest
Para que a resposta do servidor seja tratada como um objeto JSON, atribua o valor "json" à propriedade responseType
xhr.responseType = "json";
Além disso, ao enviar a requisição, é necessário definir o cabeçalho Accept com o valor "application/json":
xhr.setRequestHeader("Accept", "application/json");
Como servidor, utilizaremos Node.js, assim como no artigos anteriorer, por ser a opção mais simples. No entanto, você pode usar qualquer outra tecnologia de servidor ou um servidor web.
Vamos definir uma pasta para o projeto no disco rígido, onde criaremos três arquivos:
: a página principal da aplicação.index.html
: o arquivo contendo os dados em formato JSON.data.json
: o arquivo da aplicação servidor, que usará Node.js.server.js
Definindo os Dados
O arquivo data.json
{
"users": [
{
"name": "Tom",
"age": 39,
"contacts":
{
"email": "tom@smail.com",
"phone": "+1234567890"
}
},
{
"name": "Bob",
"age": 43,
"contacts":
{
"email": "bob@tmail.com",
"phone": "+1334567181"
}
},
{
"name": "Sam",
"age": 28,
"contacts":
{
"email": "sam@xmail.com",
"phone": "+1434567782"
}
}
]
}
O elemento users
user
name
age
contacts
phone
email
Definindo o Servidor
O arquivo server.js
const http = require("http");
const fs = require("fs");
http.createServer((request, response) => {
if (request.url == "/data") {
fs.readFile("data.json", (_, data) => response.end(data));
} else {
fs.readFile("index.html", (_, data) => response.end(data));
}
}).listen(3000, () => console.log("Servidor iniciado em http://localhost:3000"));
Vamos passar rapidamente pelo código. Primeiro, importamos os módulos que vamos usar:
const http = require("http"); // para lidar com requisições
const fs = require("fs"); // para ler arquivos do disco rígido
Para criar o servidor, usamos a função http.createServer()
request
response
No callback, podemos obter o caminho do recurso requisitado usando a propriedade request.url
/data
data.json
if (request.url == "/data") {
fs.readFile("data.json", (_, data) => response.end(data));
}
Para ler o arquivo, usamos a função fs.readFile
data
Para todas as outras requisições, enviamos o arquivo index.html
else {
fs.readFile("index.html", (_, data) => response.end(data));
}
Por fim, usamos a função listen()
http://localhost:3000
Carregando JSON na Página Web
Para obter o arquivo data.json
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Exemplo JSON</title>
</head>
<body>
<script>
const xhr = new XMLHttpRequest();
xhr.onload = () => {
if (xhr.status == 200) {
const json = xhr.response;
console.log(json);
}
};
xhr.open("GET", "/data"); // Requisição GET para /data
xhr.responseType = "json"; // Define o tipo de resposta
xhr.setRequestHeader("Accept", "application/json"); // Aceita apenas JSON
xhr.send(); // Executa a requisição
</script>
</body>
</html>
Para obter os dados, enviamos uma requisição para o endereço "/data
responseType
xhr.responseType = "json";
Além disso, é necessário definir o cabeçalho Accept
xhr.setRequestHeader("Accept", "application/json");
No manipulador de eventos onload
response
xhr.onload = () => {
if (xhr.status == 200) {
const json = xhr.response;
console.log(json);
}
};
Após definir todos os arquivos, abra o console, navegue até a pasta do servidor usando o comando cd
node server.js
C:\app>node server.js Servidor iniciado em http://localhost:3000
Depois de iniciar o servidor, você pode abrir o navegador e acessar o endereço http://localhost:3000
data.json

Exibindo Dados JSON na Página
No exemplo anterior, recebemos um objeto JSON e podemos acessar suas propriedades para extrair os dados necessários. Por exemplo, vamos exibir os dados dos usuários em uma tabela na página web. Para isso, modificamos o código do index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Exemplo JSON</title>
</head>
<body>
<div id="content"></div>
<script>
const contentDiv = document.getElementById("content");
const xhr = new XMLHttpRequest();
xhr.onload = () => {
if (xhr.status == 200) {
const json = xhr.response;
const table = createTable();
// Seleciona todos os elementos user
const users = json.users;
for (let i = 0; i < users.length; i++) {
const user = users[i];
const row = createRow(user.name, user.age, user.contacts.email);
table.appendChild(row);
}
contentDiv.appendChild(table);
}
};
xhr.open("GET", "/data");
xhr.responseType = "json"; // Define o tipo de resposta como JSON
xhr.setRequestHeader("Accept", "application/json"); // Aceita apenas JSON
xhr.send();
// Função para criar a tabela
function createTable() {
const table = document.createElement("table");
const headerRow = document.createElement("tr");
const nameColumnHeader = document.createElement("th");
const ageColumnHeader = document.createElement("th");
const contactColumnHeader = document.createElement("th");
nameColumnHeader.appendChild(document.createTextNode("Nome"));
ageColumnHeader.appendChild(document.createTextNode("Idade"));
contactColumnHeader.appendChild(document.createTextNode("Contatos"));
headerRow.appendChild(nameColumnHeader);
headerRow.appendChild(ageColumnHeader);
headerRow.appendChild(contactColumnHeader);
table.appendChild(headerRow);
return table;
}
// Função para criar uma linha da tabela
function createRow(userName, userAge, userContact) {
const row = document.createElement("tr");
const nameColumn = document.createElement("td");
const ageColumn = document.createElement("td");
const contactColumn = document.createElement("td");
nameColumn.appendChild(document.createTextNode(userName));
ageColumn.appendChild(document.createTextNode(userAge));
contactColumn.appendChild(document.createTextNode(userContact));
row.appendChild(nameColumn);
row.appendChild(ageColumn);
row.appendChild(contactColumn);
return row;
}
</script>
</body>
</html>
Nesse caso, carregamos a tabela na página dentro do elemento com o identificador "content", obtido no código JavaScript com a variável contentDiv
const contentDiv = document.getElementById("content");
Para criar a tabela, definimos duas funções auxiliares. A função createTable
table
createRow
Na parte principal do código, fazemos a requisição ao servidor. Após receber os dados JSON, selecionamos o array de objetos user
const json = xhr.response;
const table = createTable();
// Seleciona todos os objetos user
const users = json.users;
Em seguida, iteramos por todos os objetos user
name
age
contacts.email
for (let i = 0; i < users.length; i++) {
const user = users[i];
const row = createRow(user.name, user.age, user.contacts.email);
table.appendChild(row);
}
Dessa forma, ao acessar a página index.html
