Neste artigo veremos, de forma simples e objetiva, como desenvolver um sistema de pesquisa utilizando os recursos da biblioteca Prototype.
Visite o site oficial do Prototype em http://prototype.conio.net. A documentação não é um ponto forte do site, mas você pode ler uma boa referência da biblioteca no site do Sérgio Pereira: http://www.sergiopereira.com/articles/prototype140.js.ptBR.html.
Com o Prototype é possível desenvolver de forma simples e direta. Essa biblioteca encapsula diversas funções do Javascript. Neste artigo daremos ênfase aos métodos $(), $F(), Event.observe e principalmente à classe Ajax.Request.
Começaremos pela tela do usuário, página totalmente em HTML, onde há a inclusão dos arquivos prototype.js e request.js. No arquivo resquest.js estão as funções construídas para realizar a busca de livros.
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
Interface com o usuário, a primeira parte do sistema a ser construída.
Repare que no botão de pesquisa (Linha 16) não há o onclick, comumente utilizado para chamadas de funções Javascript. Isso é possível porque o sistema está utilizando Javascript não-obstrutivo. Em outras palavras, você não precisa modificar seu código html para fazer chamadas a funções Javascript. A função responsável em iniciar o processo de busca ao clicarmos no botão de pesquisa está no arquivo request.js. Para entender melhor esse conceito, recomendo dois bons artigos publicados aqui no iMasters, o primeiro do Leandro Vieira (http://www.imasters.com.br/artigo/5136) e o segundo do André Metzen (http://www.imasters.com.br/artigo/4768/).
Ao realizar uma busca utilizando, por exemplo, o termo ajax, deverá retornar uma tela como a da Figura 1.2.

Tela HTML com retorno da pesquisa realizada pela palavra-chave ajax.
Na figura abaixo temos o código-fonte do arquivo request.js:

Arquivo request.js, com todas as funções Javascript construídas pelo desenvolvedor, necessárias para a comunicação entre a tela HTML e o script de busca.
Examinando o arquivo request.js:
Linha 1: início da função responsável pelo processo de chamada do arquivo de busca que realizará a pesquisa no banco de dados.
Linha 2: informamos qual o nome da página responsável por ir ao banco de dados e trazer as informações.
Linha 3: é declarada a variável termo onde será armazenado o que foi digitado pelo usuário no campo de busca. Aqui está o Javascript não-obstrutivo, citado anteriormente, possível com o uso da função $F() do Prototype que captura o valor do elemento identificado na linha 15 da página index.html.
Linha 4: é declarada a variável contendo o parâmetro que será enviado para a página debusca (busca.php).
Linhas 5 a 7: aqui instanciamos a classe Ajax.Request. O método de envio é post. Quando a requisição terminar (onComplete) é chamada a função listaLivros().
Linha 8: função $() do Prototype, faz o papel do document.getElementById(). O innerHtml Insere a mensagem Buscando livros... no div divResultados, mensagem que será posteriormente sobrescrita quando o script chegar na Linha 10.
Linha 10: Função responsável em inserir no div divResultados o retorno HTML da página busca.php, armazenado em responseText.
Linhas 14 a 16: função obervadora Init() contendo o Event.observe do Prototype, cujo papel é observar o elemento btnBusca (linha 16 do arquivo index.html). Quanto acionado o botão de busca, será chamada a função buscaLivros().
Linha 17: Dessa vez, o Event.observe tem como objetivo chamar a função Init() ao término do carregamento da página (window, load). É importante a compreensão desse trecho, pois os elementos da página index.html, identificados pelos seus respectivos ids, passam a existir apenas depois que a página é totalmente carregada. Pesquise sobre o padrão Observer do Javascript para melhor entendimento.
Finalmente a página de busca:

Página de busca. Um script comum em PHP, que devolve o resultado do banco de dados.
Essa página não tem segredo. Ela foi construída em PHP e por funcionar de forma independente pode ser reescrita em qualquer outra linguagem, como JSP ou ASP.
Na linha 2, é instanciada a classe mysqli, que estabelece a conexão com o MySQL. A linha 7 recupera o parâmetro enviado pela Ajax.Resquest (linha 5 do arquivo request.js).
Nas linhas 14 a 17 o script varre o resultado da consulta imprimindo os dados no formatado HTML que serão exibidos no div divResultado da página index.html. Caso nenhum registro seja resultado, retornará a mensagem da linha 20.
O objetivo da requisição com HttpResquest é que o tráfego das informações ocorra em background, sem que o usuário precise esperar a página inteira ir com a requisição e depois voltar com a resposta, como acontece na navegação clássica.
Para fins didáticos, não utilizei orientação a objetos com arquitetura em camadas, mas recomendo que você construa seus aplicativos com base na arquitetura MVC: separação da lógica de banco (persistência), negócio, controle e visualização. Para quem desenvolve em PHP, recomendo para a camada de visualização o uso do template Smarty (http://smarty.php.net).
Você pode baixar o código-fonte completo deste artigo, incluindo o prototype.js, clicando aqui. Ao











16 Comentários
Qual a sua opinião?