Programação Cliente Com Javascript
Programação Cliente Com Javascript
PROPÓSITO
Apresentar a linguagem Javascript e obter o conhecimento básico necessário para utilizar
a
biblioteca Jquery na programação Client-side.
PREPARAÇÃO
Faça download do arquivo
com todos os códigos que serão tratados neste tema. Para
aplicação dos exemplos, será
necessário um editor de texto com suporte à marcação HTML.
No sistema operacional
Windows, é indicado o Notepad++. No Linux, o Nano Editor.
Uma alternativa aos editores instalados no computador é a utilização de interpretadores
online,
como Codepen e JSFiddle.
OBJETIVOS
MÓDULO 1
MÓDULO 2
MÓDULO 3
MÓDULO 4
INTRODUÇÃO
A linguagem de programação Javascript compõe as tecnologias que rodam no lado cliente no
ambiente web. Tal linguagem, que é interpretada diretamente pelo navegador, é
responsável
pelos aspectos relacionados a comportamento e interação nas páginas HTML. A
linguagem
Javascript é simples, de fácil aprendizagem e, ao mesmo tempo, muito versátil,
podendo ser
utilizada em páginas web e na criação de jogos e, mais recentemente, na
construção de
aplicativos mobile.
Ao longo deste tema, alguns conceitos básicos da linguagem serão revisados. Além disso,
será
visto como utilizar a biblioteca Jquery, a fim de otimizar o processo de
programação com uso
de Javascript.
MÓDULO 1
linear_design / Shutterstock
AF studio / Shutterstock
<!doctype html>
<html lang="pt-BR">
<head>
<meta charset="utf-8">
</head>
<body>
</body>
</html>
<!doctype html>
<html lang="pt-BR">
<head>
<meta charset="utf-8">
<script type="text/javascript">
/* Códigos Javascript */
</script>
</head>
<body>
</body>
</html>
DICA
<!doctype html>
<html lang="pt-BR">
<head>
<meta charset="utf-8">
<script type="text/javascript">
//Bloco de Instrução
if(true){
//Bloco de Função
imprimeVariavel();
function imprimeVariavel(){
console.log(msg3); //Disparará um erro dizendo que a variável msg3 não foi definida
</script>
</head>
<body>
</body>
</html>
ETAPA 01
Copie o código acima e salve em um documento com a extensão “.html”. A seguir, abra
esse
arquivo no navegador.
ETAPA 02
Abra o inspecionador de elementos e selecione a aba console.
Recarregue a página. Veja, no
inspecionador, a saída dos comandos “console.log”,
utilizados no exemplo.
ETAPA 03
Leia, com atenção, os comentários existentes no próprio código. Perceba a diferença
entre a
sobrescrita da variável msg, dentro do bloco
if, e da variável msg2, dentro do bloco de função.
Por fim, veja o que acontece com a variável msg3.
Em linhas gerais, uma variável em Javascript tem comportamento distinto de acordo com o
bloco na qual foi declarada e teve valores atribuídos. O destaque, no código anterior,
vai para a
variável msg2 definida e inicializada dentro da função
“imprimeVariavel”. Nesse caso, embora
precedida pela palavra reservada
“var”, essa variável não possui escopo global, mas local, por
ter sido definida dentro
da função.
VARIÁVEIS DEFINIDAS DENTRO DE FUNÇÕES
POSSUEM ESCOPO LOCAL, FICANDO
RESTRITAS AO ESCOPO DA FUNÇÃO.
VAR
A utilização dessa palavra reservada, na declaração de variáveis, concede
escopo global a
elas. Ou seja, variáveis declaradas utilizando var podem ser
acessadas em qualquer ponto do
script, dentro e fora de blocos – com exceção
dos blocos de funções, onde, como já
mencionado, as variáveis possuem escopo
apenas local.
LET
A partir do lançamento do Javascript 6 (ECMAScript 6 ou ES2015.) ,
tornou-se possível
melhorar o controle sobre o escopo de variáveis em JS com
a introdução da palavra-chave let.
Embora não suportada por todos os
navegadores (no Internet Explorer, ela só está disponível a
partir da versão
Edge), essa nova palavra reservada juntou-se às demais (var e const), tendo
como função, sobretudo, restringir o acesso a variáveis a nível de bloco. Ou
seja, uma variável
declarada com let, dentro de um bloco, não pode ser
acessada em nenhum outro local do
script, a não ser no bloco em questão.
Isso implica ainda que, caso declarada fora de um bloco,
essa variável passa
a ter escopo global, assim como as variáveis declaradas com var.
CONST
Nas linguagens de programação, uma variável declarada como
constante (const)
é uma
variável cujo valor é fixo, ou seja, o valor atribuído a tal variável
não pode ser alterado.
url = "www.novo-dominio.com.br";
ATENÇÃO
DICA
ARROW FUNCTIONS
Uma importante novidade foi introduzida na especificação Javascript ES6, as arrow
functions,
que podem ser definidas como uma forma mais simples de se criar
funções em JS. Veja um
exemplo em que uma arrow function que faz a multiplicação de dois
números é criada e
utilizada:
return n1 * n2;
Quando uma função possuir apenas uma expressão – no exemplo anterior, a única instrução é
retornar à multiplicação dos dois números recebidos como parâmetros –, a sua sintaxe
pode
ser ainda mais simples. Veja como ficaria, nesse caso, o exemplo anterior:
MÉTODO JS MAP
Utilizado para aplicar uma função, recebida como parâmetro, nos elementos
de um array,
devolvendo ao final um novo array.
var cores = [
];
cores.forEach(function (cor) {
nomesCores.push(cor.nome);
});
DICA
Há muito mais a ser visto a respeito das arrow functions.
Na seção Explore+, você encontrará
algumas referências a seu respeito.
EVENTOS
Os eventos são responsáveis por fornecer interatividade a uma página HTML, fazendo uso da
linguagem Javascript. Por exemplo: o clique do mouse em um link que abre uma janela
modal
ou revela um conteúdo até então escondido, como um submenu, faz uso de eventos.
Podemos criar inúmeras funcionalidades, além das duas mencionadas anteriormente, fazendo
uso de eventos. Veja o exemplo a seguir. Embora simples, ele contém a sintaxe necessária
para a criação de eventos utilizando apenas Javascript. Copie o código e salve-o em um
arquivo com extensão “.html”. A seguir, abra o arquivo em um navegador e veja o que
acontece.
<!doctype html>
<html lang="pt-BR">
<head>
<meta charset="utf-8">
<title>Eventos em Javascript</title>
</head>
<body onload="escondeTexto()">
<h1 id="titulo">Clique em qualquer lugar nesse texto para ver o conteúdo escondido.</h1>
<p id="texto_escondido">Texto escondido, que só será mostrado após click na texto acima.
</p>
<script type="text/javascript">
function escondeTexto(){
var eP = document.getElementById("texto_escondido");
eP.style.display = "none";
var hP = document.getElementById("titulo");
hP.onclick = function(){
document.getElementById("texto_escondido").style.display = "block";
</script>
</body>
</html>
A) Ao falarmos de escopo de variáveis, nós nos referimos ao local de nosso código onde
determinada variável pode ser acessada.
IMPRIMIRTEXTO();
FUNCTION IMPRIMIRTEXTO(){
CONSOLE.LOG(TEXTO);
A) Undefined.
GABARITO
1. Assinale a alternativa que corresponde à afirmativa que define o que é entendido por
escopo de variáveis na linguagem Javascript.
Na linguagem Javascript, assim como na maioria das linguagens, está presente o conceito de
escopo. Tal conceito diz respeito à acessibilidade das variáveis em diferentes partes do código.
imprimirTexto();
function imprimirTexto(){
console.log(texto);
Em Javascript, as variáveis declaradas utilizando var podem ser acessadas em qualquer ponto
do código, exceto nos blocos de funções, onde elas possuem escopo local. Logo, a variável
“texto” declarada dentro da função “imprimirTexto()” tem escopo local e só pode ser acessada
dentro da função. Como o comando “console.log” foi utilizado fora da função para imprimir o
valor de “texto”, o conteúdo disponível aqui foi o definido logo no início do código.
MÓDULO 2
Descrever como manipular a árvore DOM com
o framework jQuery
FRAMEWORKS
A BIBLIOTECA JQUERY
O jQuery é uma biblioteca Javascript rápida, pequena e rica em recursos. Tal biblioteca
simplifica o processo de manipulação de documentos HTML, manipulação de eventos,
animação e Ajax, com uma API fácil de usar, que funciona em vários navegadores (jQuery,
2020).
A primeira coisa que precisamos fazer para utilizar a biblioteca jQuery é incluí-la em nosso
código. Isso pode ser feito de duas formas:
DICA
DICA
No fragmento anterior, foi utilizada a versão 3.5.1. Como mencionado, é possível utilizar
versões anteriores. Nesse
caso, tome os cuidados necessários para garantir que os recursos
utilizados em sua página possuam suporte em versões
mais recentes, se, em algum momento,
decidir atualizar a versão.
A biblioteca jQuery fornece vários recursos para manipulação do DOM. Veremos alguns desses
recursos a seguir.
SELECIONANDO ELEMENTOS
Com jQuery, podemos referenciar qualquer elemento da página HTML utilizando o objeto:
$(SELETOR)
Ao analisar a sintaxe acima, temos o método $(), que recebe como parâmetro um seletor. Tal
seletor pode ser um elemento DOM, um array contendo um conjunto de elementos DOM ou um
objeto. Veja o código a seguir:
<!doctype html>
<html lang="pt-BR">
<head>
<meta charset="utf-8">
<title>jQuery</title>
</head>
<body>
<ul>
</ul>
<script type="text/javascript">
console.log($("#paragrafo_texto").html());
console.log($('.item_lista').eq(0).html());
</script>
</body>
</html>
PRIMEIRA INSTRUÇÃO
SEGUNDA INSTRUÇÃO
PRIMEIRA INSTRUÇÃO
Na primeira instrução “console.log”, o atributo “id” da tag <p> foi passado como seletor.
Perceba que, nesse caso, o
nome do identificador foi precedido pelo símbolo “#”. Além disso,
ambos foram englobados por aspas duplas.
SEGUNDA INSTRUÇÃO
Já na segunda instrução “console.log”, foi passado como seletor o nome da classe atribuída
aos elementos <li>. Nesse
caso, para referenciar classes, utilizamos o “.” antes do nome delas.
Além disso, foram utilizadas aspas simples –
essas últimas só para demonstrar que podem ser
utilizadas as aspas duplas e as aspas simples. Por fim, na segunda
instrução, foi utilizado o
método “eq”, que recebeu como parâmetro o número 0. Ou seja, foi selecionado o primeiro
elemento ao qual foi atribuída a classe “item_lista”. Cabe destacar ainda que, para acessar o
conteúdo das tags, foi
utilizado o método “html()”.
Vejamos outra forma de selecionar elementos. Nesse caso, utilizaremos o método “:not”.
Vamos ao código:
<!doctype html>
<html lang="pt-BR">
<head>
<meta charset="utf-8">
<title>jQuery</title>
</head>
<body>
<ul>
<li>Terceiro item</li>
</ul>
<script type="text/javascript">
console.log($('li:not(.item_lista)').html());
</script>
</body>
</html>
Veja que selecionamos o único elemento <li> que não possui a classe “item_lista”.
Esses foram exemplos simples de como é possível selecionar elementos da árvore DOM
utilizando jQuery.
Existem alguns métodos jQuery que permitem a inserção e a remoção de elementos na Árvore
DOM. Veja alguns exemplos:
<!doctype html>
<html lang="pt-BR">
<head>
<meta charset="utf-8">
<title>jQuery</title>
</head>
<body>
<div>
</div>
<div>
</div>
<ul id="container_lista">
<li>Terceiro item</li>
</ul>
<script type="text/javascript">
//Adicionando um novo item <li> ao final, dentro da tag <ul> com identificador "container_lista"
$('#container_lista').append('<li>Quarto Item</li>');
//Adicionando uma tag <h3> antes da tag <ul> com identificador "container_lista"
</script>
</body>
</html>
Para ver o resultado dos métodos utilizados, copie o código, salve-o como arquivo “html” e
abra-o no navegador. Compare
a estrutura inicial do código HTML e veja que, através dos
métodos jQuery, novos elementos foram adicionados ao
documento. Além disso, verifique
também como ficou a árvore DOM após as modificações em questão no inspecionador de
elementos.
ATENÇÃO
Leia os comentários constantes no próprio código, onde são passados mais detalhes sobre os
métodos utilizados. Repare
também que, junto com o método “after”, foi utilizado um novo tipo
de seletor, o seletor múltiplo.
<!doctype html>
<html lang="pt-BR">
<head>
<meta charset="utf-8">
<title>jQuery</title>
</head>
<body>
<div>
</div>
<div>
</div>
<ul id="container_lista">
<li>Terceiro item</li>
<li>Quarto Item</li>
</ul>
<script type="text/javascript">
$('p').eq(-1).remove();
$('li.item_lista').remove();
</script>
</body>
</html>
DICA
Copie o código e salve-o como um arquivo “html”. A seguir, comente o código Javascript e
carregue a página no navegador.
Em sequência, retire o comentário linha a linha, salve e
recarregue a página. Dessa forma, você conseguirá ver melhor a
diferença entre o conteúdo
original e o conteúdo após as manipulações realizadas.
VERIFICANDO O APRENDIZADO
<!DOCTYPE HTML>
<HTML LANG="PT-BR"><HEAD>
<META CHARSET="UTF-8">
<TITLE>PÁGINA HTML</TITLE>
<SCRIPT TYPE="TEXT/JAVASCRIPT"
SRC="HTTPS://CODE.JQUERY.COM/JQUERY-3.5.1.JS"></SCRIPT>
</HEAD>
<BODY>
<DIV ID="LIPSUM">
<P>
LOREM IPSUM DOLOR SIT AMET, CONSECTETUR ADIPISCING ELIT.
SED JUSTO IPSUM, RHONCUS AT ORCI VEL, ALIQUAM CONSEQUAT
LOREM. INTEGER CONGUE ENIM QUIS SEMPER MATTIS. AENEAN
AUGUE LIBERO, MAXIMUS ET ODIO NEC, MALESUADA TRISTIQUE
FELIS. DONEC DIGNISSIM LIBERO ID PULVINAR FAUCIBUS. PHASELLUS
BLANDIT JUSTO QUAM. INTEGER EX MASSA, RHONCUS EU LIBERO
QUIS, FERMENTUM FEUGIAT ODIO. SED TELLUS PURUS, FERMENTUM
AC EUISMOD ET, MATTIS AT NUNC. NUNC NISL LEO, DAPIBUS EGET
LOREM ID, CONGUE LOBORTIS IPSUM.
</P>
</DIV>
</BODY>
</HTML>
A) $(‘p’).find(text) = null.
B) $(body).text() = ‘’.
C) $(‘p’).html(‘’).
D) $(‘p’).val(‘’).
GABARITO
<!doctype html>
<html lang="pt-BR"><head>
<meta charset="utf-8">
<title>Página HTML</title>
</head>
<body>
<div id="lipsum">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed justo ipsum, rhoncus at
orci vel, aliquam consequat lorem. Integer congue enim quis semper mattis. Aenean
augue libero, maximus et odio nec, malesuada tristique felis. Donec dignissim libero id
pulvinar faucibus. Phasellus blandit justo quam. Integer ex massa, rhoncus eu libero
quis, fermentum feugiat odio. Sed tellus purus, fermentum ac euismod et, mattis at nunc.
Nunc nisl leo, dapibus eget lorem id, congue lobortis ipsum.
</p>
</div>
</body>
</html>
O Framework jQuery possui vários métodos para a inclusão e remoção de elementos na árvore
DOM. Entre tais métodos, o método append adiciona uma nova tag ao final do seletor indicado.
Já o método before adiciona um novo elemento no início do seletor definido.
MÓDULO 3
FIRE/FIRED
LISTENER
HANDLER
Associado à ação de manipular determinado evento.
Embora seja possível tratar todos os eventos utilizando apenas Javascript, tal processo se
torna mais intuitivo e
simples ao fazermos uso de jQuery. A seguir, veremos como manipular e
tratar eventos em uma página HTML com essa
biblioteca.
<body>, tornando possível que determinada ação seja realizada através de funções JS,
quando a tag em questão
terminar de
carregar. Isso implica dizer que todas as imagens, scripts
e arquivos CSS já foram carregados. Tal evento também
pode ser utilizado com outras tags,
como <frame>, <iframe>, <img>, <input type=’image’>,
<link>,
<script> e<style>.
O fragmento abaixo demonstra um exemplo de sua utilização, onde um alerta é exibido na tela
assim que o < body >
terminar de ser carregado.
<!doctype html>
<html lang="pt-BR">
<head>
<meta charset="utf-8">
<title>Evento onload</title>
</head>
</body>
</html>
Assim como o evento onload, o evento window.onload ocorre quando determinado conteúdo é
completamente carregado. Em JS,
o objeto window está relacionado à janela do navegador –
que contém um elemento DOM. Já o objeto document está
relacionado ao DOM carregado na
janela em questão. Portanto, o evento window.onload também é disparado quando todo o
conteúdo da página é carregado.
DICA
<!doctype html>
<html lang="pt-BR">
<head>
<meta charset="utf-8">
</head>
<body>
<div id="lipsum">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed justo ipsum, rhoncus at orci
vel, aliquam
consequat lorem. Integer congue enim quis semper mattis. Aenean augue libero,
maximus et odio nec, malesuada
tristique felis. Donec dignissim libero id pulvinar faucibus.
Phasellus blandit justo quam. Integer ex
massa, rhoncus eu libero quis, fermentum feugiat odio.
Sed tellus purus, fermentum ac euismod et, mattis at
nunc. Nunc nisl leo, dapibus eget lorem id,
congue lobortis ipsum.
</p>
</div>
<script type="text/javascript">
window.onload = function () {
</script>
</body>
</html>
Através desse evento, podemos ter acesso à página assim que a árvore DOM (tags HTML)
estiver disponível, o que ocorre
antes que todo o conteúdo seja carregado. Vejamos um
exemplo simples com o evento em questão:
<!doctype html>
<html lang="pt-BR">
<head>
<meta charset="utf-8">
</head>
<body>
<div id="lipsum">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed justo ipsum, rhoncus at orci
vel, aliquam
consequat lorem. Integer congue enim quis semper mattis. Aenean augue libero,
maximus et odio nec, malesuada
tristique felis. Donec dignissim libero id pulvinar faucibus.
Phasellus blandit justo quam. Integer ex
massa, rhoncus eu libero quis, fermentum feugiat odio.
Sed tellus purus, fermentum ac euismod et, mattis at
nunc. Nunc nisl leo, dapibus eget lorem id,
congue lobortis ipsum.
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed justo ipsum, rhoncus at orci
vel, aliquam
consequat lorem. Integer congue enim quis semper mattis. Aenean augue libero,
maximus et odio nec, malesuada
tristique felis. Donec dignissim libero id pulvinar faucibus.
Phasellus blandit justo quam. Integer ex
massa, rhoncus eu libero quis, fermentum feugiat odio.
Sed tellus purus, fermentum ac euismod et, mattis at
nunc. Nunc nisl leo, dapibus eget lorem id,
congue lobortis ipsum.
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed justo ipsum, rhoncus at orci
vel, aliquam
consequat lorem. Integer congue enim quis semper mattis. Aenean augue libero,
maximus et odio nec, malesuada
tristique felis. Donec dignissim libero id pulvinar faucibus.
Phasellus blandit justo quam. Integer ex
massa, rhoncus eu libero quis, fermentum feugiat odio.
Sed tellus purus, fermentum ac euismod et, mattis at
nunc. Nunc nisl leo, dapibus eget lorem id,
congue lobortis ipsum.
</p>
</div>
<script type="text/javascript">
window.onload = function () {
$(function () {
});
</script>
</body>
</html>
SAIBA MAIS
<!doctype html>
<html lang="pt-BR">
<head>
<meta charset="utf-8">
<title>Evento click</title>
</head>
<body>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
</ul>
<script type="text/javascript">
$('ul li').click(function () {
});
$('ul').append('<li>Item 6</li>');
</script>
</body>
</html>
O exemplo anterior, além de demonstrar o evento click em ação, adiciona um novo elemento,
dinamicamente, à lista
original, contida no próprio HTML. Teste o código no navegador. Repare
que, ao clicar do primeiro ao quinto elemento,
será exibido, no inspecionador de elementos,
aba console, o conteúdo da tag <li>. Entretanto, o mesmo não acontece no
item adicionado
dinamicamente, o “Item 6”. Isso ocorre porque o evento click só reconhece os elementos já
existentes
na página. Para adicionar o evento de “clique” ao último elemento, é necessário
utilizar outro evento, que veremos a
seguir.
No exemplo abordado no vídeo, utilizamos, no lugar do evento click, o evento on, que é
responsável por anexar uma função
de manipulação de eventos para um ou mais eventos aos
elementos selecionados. No contexto apresentado, a diferença entre
o click e o on é que o
primeiro é restrito ao DOM inicial, e o segundo, usando delegação, é válido também para novos
elementos adicionados ao DOM. Por fim, cabe destacar que o evento on não é limitado a lidar
apenas com o evento click.
Ele pode ser usado com outros eventos, como o submit – evento
disparado quando um formulário HTML é submetido, por
exemplo.
<html lang="pt-BR">
<head>
<meta charset="utf-8">
</head>
<body>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
</ul>
<form>
</form>
<script type="text/javascript">
//Evento mouseover
});
//Evento mouseleave
});
//Evento keypress
$('#inpt').keypress(function (event) {
event.preventDefault();
});
</script>
</body>
</html>
CÓDIGO ASCII
American Standard Code for Information Interchange ou Código Padrão Americano para
Intercâmbio de Informação. É um
código binário que codifica um conjunto de caracteres
referentes às letras do alfabeto latino, sinais de pontuação,
sinais matemáticos e sinais
de controle.
MÉTODO PREVENTDEFAULT()
Embora não seja um evento, é importante falar sobre esse método. A sua função é, quando
chamado, impedir que a ação
padrão de um evento não seja disparada. Vamos à prática: copie
o código a seguir, salve-o e abra-o no navegador.
<!doctype html>
<html lang="pt-BR">
<head>
<meta charset="utf-8">
<title>Método preventDefault</title>
</head>
<body>
<p>
</p>
<form action="script.php">
</form>
<script type="text/javascript">
//Click do link
$('#lnk').click(function (event) {
event.preventDefault();
});
$('#inpt_sbmt').click(function (event) {
event.preventDefault();
});
</script>
</body>
</html>
O comportamento normal do link ao ser clicado é abrir a página contida no atributo “href”. Já o
comportamento esperado
do botão de submissão do formulário é navegar para o local definido
no seu atributo action.
VOCÊ NOTOU QUE NENHUMA DESSAS AÇÕES
PADRÃO FOI EXECUTADA?
POR QUE ISSO
ACONTECE?
É para isso que serve o método event.preventDefault(), para impedir que a ação default de
determinado evento seja
executada. Sua utilidade, na prática, é diversa, uma vez que nos
permite não só impedir o comportamento normal, mas
definir outro comportamento para os
eventos. Um exemplo: você pode usá-lo para submeter os dados de um formulário via
AJAX,
impedindo que a página seja recarregada e que, por padrão, a submissão do formulário o leve
a outra página.
A seguir, veremos, de forma prática, repassando inclusive alguns dos conceitos já vistos até
aqui, como utilizar a
biblioteca jQuery para realizar requisições AJAX.
VERIFICANDO O APRENDIZADO
A) document.load.
B) $(document.load)().
C) window.onload.
D) $(document).ready().
2. A PARTIR DO CÓDIGO A SEGUIR, É DESEJADO QUE, AO SER
CLICADO, O LINK “EXIBIR ALERTA” APENAS EXIBA NA TELA UMA
CAIXA DE DIÁLOGO (ALERT), SEM, ENTRETANTO, LEVAR O USUÁRIO À
PÁGINA INDICADA EM SEU ATRIBUTO HREF (PAGINA.HTML). ASSINALE
A ALTERNATIVA CORRESPONDENTE AOS CÓDIGOS QUE PREENCHEM
AS LACUNAS E QUE DEVERÃO SER UTILIZADOS PARA REALIZAR ESSA
TAREFA.
<!DOCTYPE HTML>
<HTML LANG="PT-BR"><HEAD>
<META CHARSET="UTF-8">
<TITLE>PÁGINA HTML</TITLE>
<SCRIPT TYPE="TEXT/JAVASCRIPT"
SRC="HTTPS://CODE.JQUERY.COM/JQUERY-3.5.1.JS"></SCRIPT>
</HEAD>
<BODY>
<DIV ID="LIPSUM">
<P>
LOREM IPSUM DOLOR SIT AMET, CONSECTETUR ADIPISCING ELIT.
</P>
</DIV>
<SCRIPT TYPE="TEXT/JAVASCRIPT">
$(FUNCTION() {
_ _ _ _.PREVENTDEFAULT();
});
});
</SCRIPT>
</BODY>
</HTML>
GABARITO
O evento nativo JS window.onload ocorre quando todo o conteúdo da página é carregado. Por
outro lado, jQuery implementa um evento que permite manipular os elementos da página após
a árvore DOM ser carregada (e antes do conteúdo ser carregado). Trata-se do
$(document).ready(), que pode ser usado em sua forma simplificada: $(function(){}).
2. A partir do código a seguir, é desejado que, ao ser clicado, o link “Exibir alerta”
apenas exiba na tela uma caixa de diálogo (alert), sem, entretanto, levar o usuário à
página indicada em seu atributo href (pagina.html). Assinale a alternativa
correspondente aos códigos que preenchem as lacunas e que deverão ser utilizados
para realizar essa tarefa.
<!doctype html>
<html lang="pt-BR"><head>
<meta charset="utf-8">
<title>Página HTML</title>
</head>
<body>
<div id="lipsum">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. </p>
</div>
<script type="text/javascript">
$(function() {
_ _ _ _.preventDefault();
});
});
</script>
</body>
</html>
O método preventDefault impede que a ação padrão de um evento seja disparada. Logo,
quando associado, por exemplo, ao evento de click de um link – cuja ação padrão é carregar a
página indicada pelo atributo href –, esse método faz com que a nova página não seja
carregada. Em relação aos links e demais elementos de uma página, é possível, através de
jQuery, associá-los ao evento de click, onde várias instruções podem ser executadas. Para
isso, podemos usar o evento click() e o evento on(), diferindo esse último do primeiro pelo fato
de poder ser associado a elementos DOM não constantes na árvore inicial, ou seja, elementos
posterior e dinamicamente adicionados.
MÓDULO 4
Este módulo terá caráter eminentemente prático, possibilitando que, ao analisar e utilizar cada
código apresentado, você
consiga realizar requisições AJAX com jQuery.
ATENÇÃO
Embora seja prático, este módulo apresentará alguns conceitos básicos necessários a um
melhor aproveitamento e
entendimento dos códigos apresentados..
O QUE É AJAX?
Essa sigla significa Asynchronous Javascript and XML ou Javascript e XML Assíncronos.
Separando os termos que a compõem,
temos:
Isso implica na submissão de requisições, a partir de uma página web, sem interrupção em seu
fluxo. Em outras palavras,
a partir de requisições assíncronas, é possível requisitar recursos
remotos, transferir dados e utilizá-los na página
sem a necessidade de recarregá-la.
A INTERFACE JQUERY.AJAX()
Para realizar requisições assíncronas através de jQuery, fazemos uso da interface
jQuery.ajax(). A sintaxe desse método,
como visto a seguir, é composta pela URL para a qual
submeteremos a requisição e por um parâmetro, no formato de objeto,
que contém
informações adicionais relacionadas à requisição.
JQUERY.AJAX(URL[, SETTINGS])
Veja a seguir o primeiro exemplo, em que será demonstrado o código do lado cliente, que
deverá ser salvo como arquivo
html. Leia com atenção os comentários inseridos no próprio
código, no qual há explicações adicionais. Veja ainda que a
url de destino não existe. Logo,
para tornar o exemplo real, substitua a url em questão por uma real.
<!doctype html>
<html lang="pt-BR">
<head>
<meta charset="utf-8">
</head>
<body>
<p>
</p>
<div id="resultado"></div>
<script type="text/javascript">
//Click do link
$('#lnk').click(function () {
$.ajax({
url: "url/recurso",
type: 'post',
beforeSend: function () {
// a ser exibida
$("#resultado").html("Carregando...");
})
.done(function (msg) {
$("#resultado").html(msg);
})
});
});
</script>
</body>
</html>
Como a url utilizada não existe, você poderá ver o erro retornado em caso de falhas (.fail) no
console do inspecionador
de elementos.
Esse primeiro exemplo foi bastante simples e serviu para apresentar como realizar uma
requisição básica. No próximo
exemplo, veremos como enviar dados na requisição e a
subterremos para uma url real – um serviço online que responde a
requisições AJAX. Vamos
ao código:
<!doctype html>
<html lang="pt-BR">
<head>
<meta charset="utf-8">
</head>
<body>
<p>
</p>
<div id="resultado"></div>
<script type="text/javascript">
//Click do link
$('#lnk').click(function () {
$.ajax({
url: "https://reqres.in/api/users",
type: 'post',
data: {
},
beforeSend: function () {
// a ser exibida
$("#resultado").html("Carregando...");
})
.done(function (msg) {
//console.dir(msg);
/*
console.log(val);
});
*/
$("#resultado").html('Nome: ' + msg.name + '<br/>' + 'Filmes: ' + content + '<br/>' + 'Id: ' +
msg.id + '<br/>' + 'Data de Criação: ' + msg.createdAt);
})
});
});
</script>
</body>
</html>
A exemplo do código anterior, é realizada uma requisição AJAX, utilizando o método HTTP
POST.
A URL para a qual a requisição foi submetida pertence a um serviço online que pode responder
a diversos tipos de
requisição. Em nosso caso, foi criado um recurso e, a seguir, tal recurso foi
devolvido como resposta à solicitação.
O atributo “data” foi utilizado para enviar dados para a URL requisitada. Foram passadas uma
string, name, e um array,
movies.
JSON
Entre os dados retornados, merece destaque o atributo “movies”, por se tratar de um array.
Veja no código que há dois
métodos, tendo um permanecido comentado, para tratar esse tipo
de estrutura: o $.map e o $.each.
A biblioteca jQuery possui ainda dois outros métodos para realização de requisições AJAX:
$.GET()
Além disso, através do segundo, é possível ainda enviar dados na requisição. A sintaxe de
ambos pode ser vista nos
exemplos a seguir:
//Sintaxe: $.get(URL,callback);
});
//Sintaxe: $.post(URL,data,callback);
});
APRIMORANDO O CONHECIMENTO
Antes de continuarmos, vamos praticar o que vimos até aqui. Para isso, tomando como base
os códigos anteriores, construa
uma página HTML que faça uso do Framework jQuery para
requisitar, usando AJAX, um (ou os dois, caso queira) dos recursos
abaixo:
Recurso 1
Recurso 2
O resultado da requisição deverá ser tratado e exibido na própria página. Use sua imaginação
para melhor apresentar os
dados: utilize tabelas, listas, o que achar melhor, mas lembre-se de
que jQuery possui funções que vão ajudá-lo nesse
processo. Releia o que vimos até aqui como
ponto de partida.
Tenha atenção ao ler a documentação de cada serviço, uma vez que eles indicam qual o
método HTTP a ser utilizado em cada
requisição: se POST, GET etc. Usar o método errado
pode levar à obtenção do resultado errado ou a resultado nenhum.
RESOLUÇÃO - RECURSO 1
Código base da url/serviço “a)”:
<!doctype html>
<html lang="pt-BR">
<head>
<meta charset="utf-8">
</head>
<body>
<p>
</p>
<div id="resultado"></div>
<script type="text/javascript">
//Click do link
$('#lnk').click(function () {
$.ajax({
url: "https://reqres.in/api/users?page=2",
type: 'get',
beforeSend: function () {
// a ser exibida
$("#resultado").html("Carregando...");
})
.done(function (msg) {
table += '<tr><th>Id</th><th>Email</th><th>Nome</th><th>Sobrenome</th><th>Avatar</th>
</tr>';
table += "</table>"
$("#resultado").html("");
$("#resultado").append(table);
})
});
});
</script>
</body>
</html>
RESOLUÇÃO - RECURSO 2
<!doctype html>
<html lang="pt-BR">
<head>
<meta charset="utf-8">
</head>
<body>
<p>
</p>
<div id="resultado"></div>
<script type="text/javascript">
//Click do link
$('#lnk').click(function () {
$.ajax({
url: "https://jsonplaceholder.typicode.com/posts",
type: 'get',
beforeSend: function () {
// a ser exibida
$("#resultado").html("Carregando...");
})
.done(function (msg) {
// Nesse caso, não se tratando do código completo a ser construído pelos alunos,
$("#resultado").html(JSON.stringify(msg));
})
});
});
</script>
</body>
</html>
HTML
O arquivo contém o código HTML, alguns códigos CSS (que também poderiam ficar em
um arquivo externo) e incorpora os
scripts JS. Salve esse arquivo com o nome que
desejar, com a extensão “.html”.
JAVASCRIPT
Nesse arquivo, estão todas as funções e os códigos responsáveis por carregar o arquivo
JSON, montar a tabela HTML e
filtrar os dados. Tudo isso utilizando jQuery – olhe com
atenção o código, pois algumas funções não vistas anteriormente
foram usadas. A
sintaxe e o papel delas são autoexplicativos de acordo com o contexto em que foram
aplicadas e em razão
dos resultados que produziram. Salve esse arquivo como
“scripts.js”.
JSON
Esse arquivo contém alguns dados – id, fabricante, modelo, ano, cor e valor –
relacionados a veículos. Salve-o como
“json_data.json”.
Finalizando este tema, cabem algumas considerações sobre os códigos utilizados ao longo
dele – em especial aos
relacionados ao tópico atual, no qual integramos jQuery, AJAX e HTML,
também englobando os conceitos vistos ao longo dos
demais módulos:
SELETORES JQUERY
Vários seletores foram usados para acessar os elementos e seus atributos. Por exemplo: no
filtro de fabricante, foi
verificado se um elemento radio estava marcado acessando sua
propriedade “checked”.
EVENTOS PARA MANIPULAÇÃO DO DOM
Usando o método append, por exemplo, o conteúdo JSON, consumido via AJAX, foi
incorporado à página HTML.
VALIDAÇÃO DE DADOS
Alguns dados do formulário foram validados com a propriedade jQuery “val()”, que contém o
valor dos elementos do
formulário. Tal validação pode ser vista no filtro por ano.
filter: para filtrar dados – em nosso exemplo, foi usado no filtro de anos;
show e hide: para mostrar ou esconder elementos HTML – em nosso exemplo, foi
utilizado para mostrar e esconder os
dados de acordo com os filtros aplicados.
Por fim, é importante ainda destacar que, embora tenha sido produzido um resultado bastante
funcional através das
técnicas empregadas, há uma série de outras possibilidades que não
foram implementadas ou exploradas nos códigos
desenvolvidos. A seguir, algumas dessas
oportunidades de melhoria no código serão apresentadas.
Nos exemplos, foram utilizados alguns filtros que não cobriram todas as possibilidades,
considerando os dados
disponíveis. Por exemplo: não foram implementados filtros por cor e
valor. Além disso, uma funcionalidade importante
ficou de fora: a ordenação dos dados. Todas
essas funcionalidades podem ser implementadas e acrescentadas ao código
existente,
seguindo a mesma linha adotada, ou aperfeiçoadas com a utilização de componentes
adicionais. O Framework
jQuery possui uma biblioteca adicional, a jQuery UI, repleta de
componentes visuais ricos, como slider (que poderia ser
aplicado para filtrar os valores),
autocomplete (que poderia ser aplicado na busca por modelo e fabricante), entre
outros.
ARQUITETURA
Na arquitetura utilizada, os filtros foram aplicados sobre os dados a partir dos elementos HTML.
Essa abordagem
economiza o tráfego de dados, uma vez que não realiza novas requisições
AJAX de acordo com o filtro escolhido. Por
outro
lado, dependendo da quantidade de dados
retornados ou de outros fatores, nem sempre trazemos todos os dados de uma
única
vez.
VERIFICANDO O APRENDIZADO
A) A principal limitação desse método é não permitir que requisições AJAX sejam realizadas no
carregamento da página, dentro, por exemplo, do evento $(document).ready().
B) Na função “done”, podemos tratar o retorno da requisição, tendo havido sucesso ou ocorrido
algum erro durante o processamento, como, por exemplo, a utilização de uma URL inexistente.
C) O método $.ajax permite que sejam acessadas apenas URL remotas. Ou seja, fazendo uso
desse método, não é possível, por exemplo, carregarmos arquivos JSON locais.
"ID": 1,
"NOME": "ALUNO",
"NOTA": 10,
...
.DONE(FUNCTION(RESULT){
VAR NOMEALUNO = _ _ _ _ _ ;
VAR NOTAALUNO = _ _ _ _ _ ;
VAR DISCIPLINA = _ _ _ _ _ ;
})
...
A sintaxe do método $.ajax é composta pela URL que contém o recurso que se deseja acessar,
podendo ser remoto ou local, e por um parâmetro, no formato de objeto, onde informações
adicionais podem ser definidas. Tal método pode ser acessado a partir de qualquer outro
evento jQuery, como eventos de click ou de carregamento da página. Além disso, possui
funções distintas para tratar cada etapa da requisição, permitindo a criação de conteúdo
dinâmico, combinando conteúdos previamente existentes com novos, provenientes das
requisições realizadas.
2. Considere o fragmento de código abaixo, onde temos uma string JSON como retorno
de uma requisição AJAX, e o método .done(), que recebe como parâmetro tal string,
representada pela variável result.
//os dados abaixo estão contidos na variável result, visível na função .done
"id": 1,
"nome": "Aluno",
"nota": 10,
...
.done(function(result){
var nomeAluno = _ _ _ _ _ ;
var notaAluno = _ _ _ _ _ ;
var disciplina = _ _ _ _ _ ;
})
...
A alternativa "B " está correta.
O resultado de uma requisição AJAX, no formato JSON, permite que seus valores sejam
acessados com a notação de objetos. Logo, no fragmento acima, considerando que a variável
result contém uma string no formato JSON, podemos acessar cada uma de suas propriedades
fazendo uso da sintaxe result.PROPRIEDADE. Por exemplo, para acessar a propriedade id,
temos: result.id.
CONCLUSÃO
CONSIDERAÇÕES FINAIS
Ao longo deste tema, tratamos a programação cliente utilizando a linguagem Javascript.
Para
isso, foram utilizadas técnicas atuais de programação, em que um framework – nesse
caso,
jQuery – é empregado, otimizando todo o processo de desenvolvimento.
Após uma revisão inicial de aspectos básicos da linguagem JS, como escopo e tipos de
variáveis, passando por recursos mais complexos, como os eventos e por outros
recentemente
agregados à linguagem, como as Arrow functions, foi demonstrado, sempre com
o apoio de
exemplos práticos e funcionais, de que forma utilizar o Framework jQuery,
desde a sua
incorporação à página Web, passando pela manipulação da árvore DOM, por
alguns dos
principais eventos e métodos disponíveis na biblioteca, chegando à realização
de requisições
assíncronas – AJAX. Ao final, um exemplo completo e funcional foi
construído, no qual
recursos externos foram consumidos de forma assíncrona e
apresentados em uma página
HTML, onde também foram filtrados e manipulados.
REFERÊNCIAS
JQUERY. O que é jQuery. Consultado em meio eletrônico em: 4 ago. 2020.
EXPLORE+
CONTEUDISTA
Alexandre de Oliveira Paixão
CURRÍCULO LATTES