In: Ajax| Javascript| Jquery| Web Standards| Web developing
9 Mar 2009Quem aqui sempre sonhou em fazer aplicações em Ajax na qual o usuário pode navegar livremente utilizando o botão voltar e avançar, e além disso, pode adicionar seções específicas ao seu bookmark. Na teoria, isto não seria possível, visto que, o “Ajax” em si, utilizando pela maioria, é utilizado para recarregar apenas alguns blocos da página, mantendo aquela página ativa, e consequentemente, impossibilitando o uso do botão voltar ou de bookmarks, do contrário teríamos a boa e velha requisição da página inteira.
Mas então, como o GMAIL funciona? Ele é totalmente em ajax e mesmo assim, você consegue navegar utilizando o botão voltar, e se colocar um link como http://mail.google.com/mail/#compose na barra de endereços, ele irá abrir a tela de composição de e-mails normalmente. O grande segredo está nas #âncoras.
Navegação Orientada a Âncoras
Uma coisa muito interessante das chamadas Âncoras, é que elas permitem que você use o botão voltar e avançar, por exemplo, sem gerar nenhuma requisição e sem precisar sair daquela página, então, o que poderíamos fazer?
A primeira coisa seria criar um arquivo Javascript que irá ficar toda hora verificando se alguma âncora está ativa, caso esteja, ele envia a requisição ajax chamando a seção específica, baseada no nome da âncora, que será carregada dentro do bloco principal, simples não?
Como já é de praxe para Javascript hoje em dia, usaremos Jquery, portanto, lembrem-se de incluir o arquivo da biblioteca na sua aplicação.
Teríamos então, um arquivo de nome “core.js”, assim:
Ok, o conteúdo será carregando no eleme nto de ID “bloco_principal” através do resultado das requisições Ajax que estão sendo enviadas para a página “callbacks.php” em formato de querystring GET.
Para pegarmos, teríamos algo desse tipo:
Com isso, bastaria uma pasta “paginas” contendo as páginas com os mesmos nomes das âncoras.
E para chamar cada seção, bastaria uma simples página html com links do tipo:
http://meusite.com/#fotos
que seria detectado pelo método “checkAnchor()” do javascript, que chamará uma requisição php carregando a página de nome fotos.php dentro do diretorio paginas, que será exibida dentro do bloco #bloco_principal que está contido na mesma página do link clicado, e o melhor de tudo, você pode voltar, avançar e adicionar as seções que quiser aos favoritos, à vontade.
Para ilustrar melhor o exemplo, fiz uma cópia descarada (haha), do site do evento php-pb.net, com a única diferença de possuir navegação em ajax através de âncoras (o original possui navegação normal). Acessem pelo link: http://www.diegopessoa.com/php-pb-ajax
Se quiserem baixar o exemplo funcionando, cliquem aqui!
Hi! I'm a Brazilian Software Developer. Degree in Systems for the Internet at IFPB and enthusiast of technologies related to web. Nowadays I'm working as technical leader of the ITVP project at the Dynavideo company. (See more)
6 Responses to Resolvendo o problema do botão voltar em aplicações Ajax
ivolnei
January 19th, 2010 at 18:58
Show de bola, estava procurando isso a muito tempo e efim, cá está.
Parabéns.
Uma questão. Se eu quiser mandar um valor pela URL, como faço?
Diego Pessoa
January 19th, 2010 at 20:53
Olá Ivolnei, obrigado!
Basta adicionar o parâmetro normalmente após a marcação da âncora, exemplo: site.com/#secao&id=5. O código disponível no post trata também os parâmetros.
=)
Candida
April 13th, 2010 at 1:10
Olá Diego… estou fazendo uma página em ajax + php. Esta página pega dados dinamicos e joga em paginações… Só que não estou conseguindo fazer funcionar se a url que envio fica assim: #sistema?idpessoa=1. Tens alguma solução?
Candida
April 13th, 2010 at 13:23
Ja consegui descobrir o que era ^^ Mas valeu memso assim =P… super show o tutorial parabens =D
Diego Pessoa
May 11th, 2010 at 21:16
Obrigado =)
Eduardo
June 24th, 2010 at 20:50
Cara, muito bom. Sabe dizer se o Gmail usa a mesma técnica? Vi que eles usam âncoras e a página não é recarregada ao navegar (modifiquei parte do html com o Firebug e ele não é restaurado).