O primeiro teste que fiz com Ajax e Free Pascal não foi lá muito prático. Desde então senti-me na obrigação de refazer tal teste, mas com um exemplo mais didático e prático. Como minha incursão neste novo mundo do Ajax e da Web 2.0 ainda é muito inicial, senti necessidade de apoio didático e acabei comprando um livro para aprender mais sobre o assunto. O livro é "Web Interativa com Ajax e PHP", ISBN 978-85-7522-126-6, de Juliano Niederauer, editora Novatec - excelente, por sinal. Logo ao ler o primeiro exemplo (páginas 105 e 106) resolvi adaptá-lo para o Lazarus. No teste usei o Free Spider, escolhido pela sua simplicidade em criar aplicações Web e o qual estou usando em um projeto de porte significativo.
As adaptações foram pouquíssimas e o programa em Lazarus/Free Spider que substitui o programa em PHP é muito simples. A primeira coisa que fiz foi digitar o código HTML que contem as funções em JavaScript e fazer uma pequena adaptação destacada em vermelho no código abaixo:
Como pode ver, o código é bem simples (talvez as funções em JavaScript pareçam um pouco complicado aos olhos dos iniciantes). A parte em Lazarus / Free Spider é mais simples ainda. Vejam:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
procedure TDataModule1.DataModuleCreate(Sender: TObject); | |
begin | |
SpiderCGI1.Execute; | |
end; | |
procedure TDataModule1.SpiderCGI1Request(Sender: TObject; Request: TSpiderRequest; var Response: TSpiderResponse); | |
var | |
Nome: String; | |
Valor: String; | |
begin | |
Nome := SpiderCGI1.Request.Form('nome'); | |
Valor := SpiderCGI1.Request.Form('valor'); | |
SpiderCGI1.Response.Add(Nome + ', o servidor disse que o quadrado de ' + Valor + ' vale ' + | |
IntToStr(StrToIntDef(Valor, 0) * StrToIntDef(Valor, 0))); | |
end; |
O código em Lazarus / Free Spider recebe os campos através do método POST e envia uma resposta em texto bem simples à função JavaScript da página, a qual atualiza o campo "resultado" do form. Seria possível fazer coisas bem sofisticadas como carregar uma lista de cidades ao se escolher uma determinada UF e sem recarregar a página ou poluir o HTML com JavaScript desnecessário. Fico aqui com a dívida de fornecer um exemplo similar com banco de dados.
E um exemplo da saída é:
Para quem não conhece o poder do Ajax, ele permite que a página requisite dados sem que seja exigido um carregamento completo de todo o código.
O código (HMTL + Lazarus) pode ser baixado a partir de: teste_ajax.7z
Os testes foram feitos no XP SP2 com servidor Web Server2Go.
[]'s,
Ericson Benjamim.
Ericson Benjamim.
Muito bom Ericson! Vou tentar fazer a mesma coisa em PHP e comparar com Pascal para ver o tempo de resposta e etc... Uma vantagem que já vejo do pascal é a proteção do código, por ser compilado! :). Parabéns pelo post!!!
ResponderExcluirValeu, Messias. Proteção de código foi um dos motivos por ter escolhido o Lazarus ao invés de PHP.
ResponderExcluirOlá Ericson, no windows eu consegui rodar beleza! Porém quando tento construir o projeto no lazarus rodando no linux, dá erro. Vc sabe se tem que fazer alguma modificação? Instalei a mesma versão do componente na IDE nos dois ambientes... E o pior é que não consigo sacar qual é o erro, pois a mensagem de erro não aponta nada!
ResponderExcluirMessias, ainda não testei no Linux, mas dá para adaptar este exemplo para funcionar com o fpWeb ou CGI do Lazarus. Vou preparar um artigo com estas opções e no Linux também. Aqui usei o Lazarus 0.9.29 FPC 2.3.1.
ResponderExcluir