Nessa página HTML simples eu descrevo, de forma sucinta, as principais funcionalidades de cada exemplo.
O primeiro bloco de código é um documento HTML que define a estrutura e o estilo da página. A seção
<head>
contém informações sobre a codificação de caracteres, o título da página e a folha
de estilo usada para formatar o conteúdo. A seção <body>
contém o conteúdo principal da
página, incluindo um cabeçalho, dois parágrafos e um botão.
O botão é criado dentro de um elemento
<div>
com o id
"divDemo". Quando o botão é clicado, o script
loadExtraContent
é executado. Esse script cria uma nova instância do objeto
XMLHttpRequest
e define um evento onload
que é acionado quando a resposta é
recebida do servidor. Esse evento atualiza o conteúdo do elemento <div>
com a
resposta recebida.
<div id="divDemo">
<button type="button">Clique para carregar mais conteúdo com Ajax</button>
</div>
<script>
function loadExtraContent() {
let xhr = new XMLHttpRequest();
xhr.open("GET", "conteudoAdicional.html", true);
xhr.onload = function () {
document.getElementById("divDemo").innerHTML = xhr.responseText;
};
xhr.onerror = function () {
console.log("Erro de rede - requisição não finalizada");
};
xhr.send();
}
const button = document.querySelector("#divDemo > button");
button.addEventListener("click", loadExtraContent);
</script>
O segundo bloco de código é o conteúdo adicional que é carregado dinamicamente quando o botão é clicado. Este conteúdo inclui informações sobre os cursos de graduação e pós-graduação oferecidos pela Faculdade de Computação da UFU, além de informações de contato. Ele é carregado a partir de um arquivo HTML externo chamado "conteudoAdicional.html".
<hr>
<h2>Hello Ajax!</h2>
<p>Este conteúdo acabou de ser buscado no servidor e inserido dinamicamente na página com Ajax!</p>
<h2>Cursos de Graduação</h2>
<p>A FACOM oferece os cursos de Bacharelado em Ciência da Computação, em Uberlândia, e Bacharelado
em Sistemas de Informação, em Uberlândia e Monte Carmelo.</p>
<h2>Cursos de Pós-Graduação</h2>
<p>A <abbr title="Faculdade de Computação">FACOM</abbr> oferece também os cursos de
Mestrado Acadêmico e Doutorado em Ciência da Computação.</p>
<address>
Campus Santa Mônica, Bloco 1A
Av. João Naves de Ávila, 2121, Bairro Santa Mônica
Uberlândia, MG
CEP 38400-902
</address>
Quando o botão é clicado, o script
loadExtraContent
é executado e faz uma solicitação GET para o arquivo
"conteudoAdicional.html". Se a solicitação for bem-sucedida, a resposta do servidor é inserida
no elemento <div>
com o id
"divDemo". Se ocorrer um erro, uma
mensagem de erro é registrada no console do navegador.
Os dois blocos de código trabalham juntos para criar uma experiência de usuário mais dinâmica, permitindo que o conteúdo adicional seja carregado dinamicamente em resposta às ações do usuário. Isso pode melhorar a usabilidade e a acessibilidade da página, reduzindo a quantidade de conteúdo desnecessário que é carregado inicialmente e permitindo que o usuário acesse informações adicionais quando necessário.
Resultados das sugestões de testes
xhr.open("GET", "conteudoAdicional.html", true);
, a solicitação GET
falhará porque o servidor não será encontrado. O evento onerror
será acionado e a
mensagem "Erro de rede - requisição não finalizada" será registrada no console do
navegador. O conteúdo adicional não será carregado e o usuário não verá nenhuma mudança na página.
A página HTML contém um formulário para inserir um
CEP. Ele também inclui um elemento <span>
com o id
"cidade"
que será usado para exibir o nome da cidade correspondente ao CEP inserido.
Quando o usuário insere um CEP válido (comprimento
igual a 9 caracteres), o script buscaCidade
é acionado. Esse script cria um objeto
XMLHttpRequest
e faz uma requisição GET para o arquivo "busca-cidade.php"
passando o CEP como parâmetro.
O script possui duas funções de callback:
xhr.onload
e xhr.onerror
. A função xhr.onload
é acionada quando a
resposta da requisição é recebida. Se o status da resposta for 200, o nome da cidade é atualizado no
elemento <span>
com o id
"cidade". Caso contrário, o nome da
cidade é limpo e uma mensagem de erro é registrada no console do navegador.
A função xhr.onerror
é acionada quando
ocorre um erro de rede durante a requisição. Uma mensagem de erro é registrada no console.
O evento window.onload
é usado para
adicionar um listener ao input de CEP. Sempre que o usuário digita algo no input, a função
buscaCidade
é chamada, passando o valor do input como argumento.
Além do código HTML e JavaScript, há um trecho de código PHP que é processado no lado do servidor. Ele recebe o valor do parâmetro "cep" através do método GET e faz uma verificação para retornar o nome da cidade correspondente ao CEP informado. Se o CEP não for encontrado, é retornado um código de resposta HTTP 404 e uma mensagem informando que o CEP não está disponível.
A página HTML utiliza o framework Bootstrap para criar um formulário de preenchimento de endereço. O formulário possui campos para CEP, rua, bairro e cidade.
Para garantir a usabilidade do formulário, foi
implementado um script em JavaScript chamado buscaEndereco
. Esse script é ativado quando o
usuário insere um CEP válido (comprimento igual a 9 caracteres). Ele utiliza o objeto
XMLHttpRequest
para fazer uma requisição GET ao arquivo "busca-endereco.php",
passando o CEP como parâmetro.
Ao receber a resposta da requisição, o script define
duas funções de callback: xhr.onload
e xhr.onerror
. A função
xhr.onload
é acionada quando a resposta da requisição é recebida. Ela realiza uma série de
verificações para garantir que a requisição foi bem-sucedida (status 200) e se a resposta pode ser
convertida em um objeto JavaScript válido. Em caso afirmativo, os dados do endereço são extraídos da
resposta e utilizados para preencher os campos do formulário correspondentes. Caso contrário, é exibida
uma mensagem de erro no console do navegador.
A função xhr.onerror
é acionada caso
ocorra um erro de rede durante a requisição. Uma mensagem de erro é exibida no console para informar o
usuário sobre o problema.
Para garantir que a função buscaEndereco
seja executada sempre que o usuário digitar algo no campo de input de CEP, foi utilizado o evento
window.onload
para adicionar um listener ao campo. Dessa forma, o valor do input é passado
como argumento para a função buscaEndereco
e a busca de endereço é feita de forma
assíncrona, sem a necessidade de recarregar a página.
Além do código HTML e JavaScript, há um trecho de
código PHP que é processado no lado do servidor. Ele recebe o valor do parâmetro "cep" via
método GET e cria um objeto Endereco
com informações fictícias de rua, bairro e cidade, com
base no CEP fornecido. Em seguida, o endereço é convertido para o formato JSON e enviado como resposta,
junto com o cabeçalho "Content-type: application/json".
Nesse exercício, apenas houve alterações no script, em relação ao anterior. Sendo que,as duas versões do
script buscaEndereco
apresentam algumas diferenças em relação ao tratamento da resposta da
requisição e manipulação dos dados retornados. A seguir, as principais diferenças:
responseType
é definida como
'json'
, indicando que se espera uma resposta no formato JSON. Isso permite que o
objeto xhr.response
seja diretamente convertido em um objeto JavaScript válido.
responseType
. A resposta é obtida
como uma string de texto, e em seguida, é feita uma tentativa de converter essa string em um objeto
JavaScript usando JSON.parse(xhr.responseText)
. Caso a conversão falhe, uma mensagem de
erro é exibida.
xhr.response
não é nulo. Essa verificação é realizada para garantir que a
requisição foi bem-sucedida e que a resposta pode ser convertida em um objeto JavaScript válido.
Em termos de funcionalidade básica, os dois scripts realizam a mesma tarefa de fazer uma requisição assíncrona para buscar dados de endereço com base em um CEP e preencher os campos do formulário correspondentes. No entanto, a abordagem de manipulação e verificação da resposta é ligeiramente diferente entre os dois scripts. Não houve diferenças no script php.
Já no ex5 no qual se envia o json, a função buscaEndereco
do script apresenta diferenças
significativas em relação ao anterior, no que diz respeito à forma como a requisição é enviada e os dados são
tratados. Vamos analisar as diferenças principais:
xhr.open("GET", "busca-endereco.php?cep=" + cep, true)
.
xhr.open("POST", "busca-endereco.php")
. Os parâmetros são fornecidos
como um objeto JavaScript, convertido em uma string JSON usando JSON.stringify(objetoJS)
, e
enviado através do método xhr.send()
.
objetoJS
, que contém propriedades como cep
, email
e
apikey
.
JSON.parse(xhr.responseText)
.
JSON.parse(xhr.responseText)
para converter a resposta em um objeto JavaScript.
No entanto, não há verificação do código de status da resposta.
No script PHP do ex5:
$cep = $_GET['cep'] ?? '';
Nesse trecho, o valor do parâmetro cep
é obtido a partir dos parâmetros da URL, usando a variável
global $_GET
. Essa abordagem pressupõe que o parâmetro cep
seja passado na URL, por
exemplo, através de uma requisição GET com a seguinte estrutura:
busca-endereco.php?cep=38400-100
. O script verifica o valor do $cep
e cria um objeto
Endereco
com valores predefinidos para rua, bairro e cidade, dependendo do valor do CEP. Em
seguida, ele retorna os dados do endereço em formato JSON como resposta
No script PHP atual:
$stringJSON = file_get_contents('php://input');
$dados = json_decode($stringJSON);
$cep = $dados->cep;
Nesse caso, o script espera receber os dados no corpo
da requisição, em formato JSON. A função file_get_contents('php://input')
é
utilizada para obter a string JSON que contém os dados enviados. A partir dessa string JSON, a função
json_decode($stringJSON)
é usada para converter a string JSON em um objeto PHP chamado
$dados
. O valor do CEP é acessado usando $cep = $dados->cep
. Em seguida, o
script verifica o valor do $cep
e cria um objeto Endereco
com valores
predefinidos para rua, bairro e cidade, dependendo do valor do CEP. Por fim, ele retorna os dados do
endereço em formato JSON como resposta.
A página de login HTML é uma interface simples de login com campos de e-mail, senha e um botão de entrada. Aqui estão os principais pontos do código HTML e do script JavaScript embutido:
sendForm(form)
para
enviar o formulário de login para o servidor usando AJAX.
XMLHttpRequest
para fazer a
requisição assíncrona ao servidor.
action
do formulário.
xhr.responseType
.
onload
para processar a
resposta do servidor. Se a resposta for bem-sucedida (status 200) e puder ser convertida em
objeto JSON, os dados de resposta são utilizados.
loginResponse.success
), o usuário é redirecionado para uma página de
boas-vindas.
onerror
para lidar com erros de
rede.
Script PHP (checkLogin.php): Este script PHP é responsável por verificar as credenciais de login enviadas pelo formulário e retornar uma resposta JSON indicando o resultado da verificação. Aqui estão os principais pontos do script PHP:
RequestResponse
, que possui propriedades success
e detail
.
Essa classe será usada para estruturar a resposta JSON.
$_POST['email']
e $_POST['senha']
.
RequestResponse
com sucesso (true
) e um detalhe indicando a página de
boas-vindas.
RequestResponse
com
sucesso (false
) e um detalhe vazio.
json_encode
.
Esses códigos em conjunto criam uma página de login interativa em que o usuário pode inserir suas credenciais, enviá-las para o servidor usando AJAX e receber uma resposta JSON que indica se o login foi bem-sucedido ou não. Dependendo da resposta, o usuário é redirecionado para a página de boas-vindas ou uma mensagem de erro é exibida.
Igor Augusto