Conhecendo Ajax : Turbine a Interatividade de suas

Propaganda
Conhecendo Ajax : Turbine a Interatividade de suas Aplicacoes Web
Se você tem acompanhado as ultimas noticias relacionadas com desenvolvimento web,
provavelmente já ouviu falar do termo Ájax, acrômino para Assynchronous JavaScript +
CSS + DOM + XMLHttpRequest, ou simplesmente Assynchronous JavaScript and XML
como ficou conhecido na web.
Para entender o que é Ájax, é interessante recapitular o modo como funcionam
requisições/respostas e a exibição de páginas na web. Em uma página quando o usuário
clica em um link ou submete um formulário, o servidor processa as informações e retorna
uma página completa, que é então renderizada pelo navegador em substituição a primeira, o
problema é a demora do servidor somada ao tempo de renderização da página pelo
navegador, resultando em uma página em branco e lentidão em resposta as ações do
usuário.
Para minimizar este efeito, uma abordagem era a submissão destes dados através de um
canal separado utilizando JavaScript. Em seguida o servidor devolve somente os dados que
precisam ser modificados como resposta, através do mesmo canal, não necessitando uma
nova renderização da página. Um trecho de código javaScript se encarrega de manipular
estes dados e atualizar a página, deixando a página mais interativa e responsiva perante o
usuário.
Inicialmente esta técnica começou a ser utilizada através da construção de um frame de
tamanho mínimo que realizava a requisição e obtinha como resposta uma página contendo
os dados e um script que atualizava o frame principal. O problema é que esta abordagem
aumentava demais a complexibilidade da aplicação.
A situação melhorou com a introdução no Internet Explorer 5, da classe XMLHttpRequest,
que permite a requisição de forma assíncrona e a manipulação do conteúdo destas páginas
na forma de dados. Isto simplificou muito a utilização do canal separado e sem a
necessidade de se utilizar frames escondidos.
Num esforço por maior compatibilidade entre os navegadores, o grupo Mozilla criou uma
classe equivalente ao XMLHttpRequest que foi seguida por outros navegadores como
Safári, konqueror, OmniWeb e Opera.
A técnica de criar uma página atualizada dinamicamente e parcialmente através de
requisições ao servidor utilizando o objeto XMLHttpRequest ficou conhecida como Ajax.
Implementando Ajax
O fragmento de código abaixo cria uma referência para o objeto XMlHttpRequest.
var xmlhttp = false;
try {
Xmlhttp = new ActiveXObject(“Msxml2.XMLHTTP”);
} catch (e) {
try {
xmlhttp = new ActiveXObject(“Microsoft.XMLHTTP”);
} catch (e) {
xmlhttp = false;
}
}
if (!xmlhttp && typeofXMLHttpRequest != “undefined”) {
xmlhttp = new XMLHttpRequest();
}
Este script tem sido considerado um dos padrões para criação da instancia de
XMLHttpRequest de forma independente de navegador. Inicialmente o script tenta obter
uma instancia para o Internet Explorer e caso o navegador tenha a sua própria
implementação do tipo XMLHttpRequest, o script tenta criar uma instancia deste tipo no
bloco condicional no final do código.
Como exemplo de utilização, um campo combo-box do formulário através do atributo
onChange pode chamar a função alteraProjeto().
alteraProjeto() {
var url = “testeXML.jsp?projeto=” + document.getElementById(“projeto”).value;
xmlhttp.open(“GET”, url, true);
xmlhttp.onreadstatechange = function() {
if (xmlhttp.readyState == 4) {
criaTabela(xmlhttp.responseXML);
}
}
xmlhttp.send(null);
};
Esta função requisita a página testeXML.jsp, passando como parâmetro o identificador do
projeto selecionado.
A execução de uma requisição Ajax segue os seguintes passos:
1. É invocado o método open() do objeto XMLHttpRequest, passando o método HTTP
desejado, geralmente GET ou POST, alem da URL a ser requisitada e uma flag
indicando se a requisição é assíncrona ou não.
2. Omo a chamada é assíncrona, é definido um gerenciador para notificar quando a
resposta do servidor estiver completa, readyState igual a 4. Será chamado o método
criaTabela passando-se o conteúdo XMl obtido como resposta do servidor.
3. O método send() realiza o envio da requisição, passando como parâmetro o corpo da
mensagem a ser enviada, no caso de uma requisição POST.
A página testeXML.jsp é responsável por gerar um documento XML com os dados de
atividades do projeto selecionado passado como parâmetro. Este documento XML irá
possuir o seguinte formato:
<?xml version=”1.0” encoding=”UTF-8”?>
<dados>
<atividade>
<descricao>Criar projeto Teste</descricao>
<dataInicial>01/01/2006</dataInicial>
<dataFinal>02/02/2006</dataFinal>
</atividade>
</dados>
A manipulação dos dados de resposta no formato XML dentro do JavaScript deve respeitar
duas condições:
1. O content-type da pagina de resposta deve ser definido como test/xml;
2. Os dados de resposta devem ser obtidos através da propriedade responseXML do
objeto XMLHttpRequest]
Dentro da função criaTabela(), toda a manipulação dos dados no XML á feita através do
método getElementsByTagName() do objeto XMLDocument passando como parâmetro o
nome da tag e retornando uma lista de elementos XML referentes a tag passada. Cada
elemento XML será representado pela sua estrutura DOM.
function criaTabela(ajaxResponse) {
var data = ajaxResponse.getElementsByTagName("atividade");
var htmlText = "<table border='1' >"+
" <tr>"+
" <th>Descrição</th>"+
"
<th>Data Inicial</th>"+
"
<th>Data Final</th>"+
" </tr>"
for(i=0;i<data.length;i++)
{
var desc = data[i].getElementsByTagName("descricao").item(0);
var dataInicial = data[i].getElementsByTagName("dataInicial").item(0);
var dataFinal = data[i].getElementsByTagName("dataFinal").item(0);
htmlText=htmlText+"<tr><td>"+
desc.firstChild.data+"</td><td>"+
dataInicial.firstChild.data+"</td><td>"+
dataFinal.firstChild.data+"</td><td></tr>";
}
htmlText=htmlText+"</table>";
document.getElementById("tabela").innerHTML=htmlText;
};
Em resumo, nova ou não, a técnica Ájax apresenta uma visão diferente para o
desenvolvimento de aplicações web mais intuitivas, sem a necessidade de Applets ou
plugins. Desenvolver com Ájax “no braço” já não é mais uma tarefa complicada, e com os
novos frameworks e taglibs que estão surgindo, a tarefa irá ficar mais simples ainda. É hora
de começar a olhar a arquitetura de sistema web de uma maneira mais interativa.
Java Magazine – Edição 28 – Ano IV
Alexandre Denes dos Santos
Download