Web 2.0: Muito além do ajax (códigos apresentados durante a palestra)

Bom, estou devendo as pessoas que assistiram minha palestra no III EPSL os códigos que utilizei. Pessoa desculpas pela demora, é que as semanas que se seguiram após o EPSL foram de correria extrema.

Primeiro vamos as funções que utilizei para utilizar o ajax, aconselho que elas estejam em um arquivo separado e o incluam em suas páginas, estas são funções em JavaScript.

  1. // —————————– FUNÇÕES DO AJAX ———————————–
  2. //Fila de conexões
  3. fila=[]
  4. ifila=0
  5. function ajaxPOSTRun(url,parameters){
  6. xmlhttp.onreadystatechange = alertContents;
  7. xmlhttp.open(‘POST’, url, true);
  8. xmlhttp.setRequestHeader(“Content-type”, “application/x-www-form-urlencoded”);
  9. xmlhttp.setRequestHeader(“Content-length”, parameters.length);
  10. xmlhttp.setRequestHeader(“Connection”, “close”);
  11. xmlhttp.send(parameters);
  12. }
  13. function ajaxHTML(id,url,carr){
  14. //Carregando…
  15. if (typeof carr == “undefined”)
  16. document.getElementById(id).innerHTML=”Carregando…”;
  17. //Adiciona à fila
  18. fila[fila.length]=[id,url]
  19. //Se não há conexões pendentes, executa
  20. if((ifila+1)==fila.length)ajaxRun()
  21. }
  22. //Executa a próxima conexão da fila
  23. function ajaxRun(){
  24. //Abre a conexão
  25. xmlhttp.open(“GET”,fila[ifila][1],true);
  26. //Função para tratamento do retorno
  27. xmlhttp.onreadystatechange=function() {
  28. if (xmlhttp.readyState==4){
  29. //Mostra o HTML recebido
  30. retorno=unescape(xmlhttp.responseText.replace(/\+/g,” “))
  31. //retorno=xmlhttp.responseText
  32. document.getElementById(fila[ifila][0]).innerHTML=retorno
  33. //Roda o próximo
  34. ifila++
  35. if(ifila
  36. if(document.getElementById(‘calendario’)){
  37. var myTips = new Tips($$(‘#calendario .agenda_data_marcada’),{maxTitleChars:200,onShow:function(x){x.setOpacity(0.9)}});
  38. $$(“.tool-tip”).each(function(x){
  39. x.setStyle(“visibility”,”hidden”);
  40. });
  41. }
  42. }
  43. }
  44. //Executa
  45. xmlhttp.send(null)
  46. }
  47. //Tenta criar o objeto xmlHTTP
  48. try{
  49. xmlhttp = new XMLHttpRequest();
  50. }catch(ee){
  51. try{
  52. xmlhttp = new ActiveXObject(“Msxml2.XMLHTTP”);
  53. }catch(e){
  54. try{
  55. xmlhttp = new ActiveXObject(“Microsoft.XMLHTTP”);
  56. }catch(E){
  57. xmlhttp = false;
  58. }
  59. }
  60. }

Pronto, estas são as funções genéricas para utilizar o ajax, e que abstraem o trabalho o tornando mais simples. Vamos agora criar a função javascript que vai chamar a função ajaxHTML dessas nossas funções. Utilizar essa abstração é muito simples como veremos.

Na página onde queremos que o evento aconteça colocaremos a seguinte função javascript, no exemplo que tratei na palestra é um sistema de acompanhamento de obras de uma construtora, o “ajax” serve para tornar a aplicação mais leve, rápida e interessante ao usuário. Temos uma obra e vinculada a esta temos etapas da construção, cada etapa pode conter diversos álbuns, como seriam muitas miniaturas, e conseqüentemente um temo de espera maior, resolvi implementar o ajax para maximizar a experiência do usuário, como disse anteriormente.

Temos 2 funções uma que chama o “ajax” para fazer a requisição das etapas da construção que temos cadastradas no banco para obra, cujo o id passei como parâmetro na função, chamei essa função de CarregarAlbuns(id_obra), onde passo o id da obra e o “ajax” chama a página de apoio que contém o select no banco para retornar os álbuns associados aquela obra. Segue a função:

  1. function {
  2. axHTML(“div_album”,’albuns.php?id_obra=’+id_obra);
  3. };

Para chamar a função passamos 3 parâmetros necessários e 1 extra para chamar uma imagem enquanto o ajax carrega as informações. Primeiro parâmetro é a div onde desejamos que o ajax atue, em nosso exemplo utilizaremos a div_album, que deve estar no código porém vazia (o ajax a preencherá futuramente ). O segundo parâmetro é a pagina de apoio que terá a ação para preencher a div que setamos no primeiro parâmetro (no nosso caso a div_album), em nosso exemplo chamamos a página albuns.php?id_obra=”" que contém um select para achar os albuns associados a obra, cujo o id passamos por get para a págian albuns.php. O que for “ecoado” (usando a função echo do PHP) nessa página (albuns.php), será escrito dentro da div_album quando a função CarregarAlbuns(id_obra) for chamada, em nosso exemplo chamamos tal função utilizando o evento onclick no link Ver Fotos da obra. OBS: $_db é onde estão dados buscados no banco. As tags estão cortados para pode serem reproduzidas corretamente, lembrem de corrigir.

  1. Ver fotos da obra…/a>/p>

Então a div será preenchida com conteúdo, movendo o conteúdo colocado depois do fim da div_album para baixo, o que dará a impressão de movimento.

2.jpg

Logo depois de termos carregado a listagem dos álbuns que temos, queremos agora listar as imagens que temos para aquele álbum, então devemos acrescentar uma função junto a função anterior (CarregarAlbuns(id_obra)) chamada CarregarFotos(id_album):

  1. function CarregarFotos(id_album){
  2. ajaxHTML(“div_fotos”,’fotos.php?id_album=’+id_album);
  3. };

Ao carregarmos as etapas temos o link para cada álbum, que através do evento onclick chamamos a função que criamos, esse caso é similar a anterior, me refiro aos parâmetros da função o que muda é que a div_fotos que é onde escreveremos as fotos usando ajax (da mesma maneira como foi feito na função anterior), a div vazia deve estar contida dentro da página de apoio anterior, exatamente após o título da etapa de construção.

3.jpg

No final de tudo podemos incrementar a aplicação utilizando o Slimbox

4.jpg

Você pode encontrar os slides da palestra em PDF no link palestras no menu acima.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

About Moisés Souto

Moisés Souto possui graduação em Engenharia de Computação pela Universidade Potiguar (UnP) e atualmente é Mestrando do Programa de Pós-Graduação em Engenharia Elétrica e de Computação pela Universidade Federal do Rio Grande do Norte (UFRN).Tem experiência na área de Ciência da Computação e Engenharia de Computação, com ênfase em Engenharia de Software, atuando principalmente nos seguintes temas: Administração de Sistemas Operacionais GNU/Linux; Segurança e Auditoria de Sistemas; Sistemas Distribuídos e Processamento Paralelo; Implementação de Soluções e Tecnologias em Software Livre; Sistemas Inteligentes; Sistemas e Tecnologias de Rede e Internet; Administração de redes e serviços; Desenvolvimento web; Programação Orientada a Objeto; Administração de Banco de Dados; Gerência de tecnologia de informação; Programação baixo nível para dispositivos embarcados e microcontroladores; Concepção de circuitos integrados; Automação e Controle; Robótica.
This entry was posted in PSL, ajax, geral, software livre, web. Bookmark the permalink.

2 Responses to Web 2.0: Muito além do ajax (códigos apresentados durante a palestra)

  1. João Lelo says:

    Amigo, nesse seu código entre as linhas 40 e 45 pra q vc tá verificando essa div ‘calendário’??
    E pra que esse tooltip??
    E se vc tá usando essa sintaxe $(‘id’) (usados nos framework jQuery ou mootools) pq vc num já usou as classes de ajax desse frameworks??
    E no caso se sua classe usa esse sintaxe eu teria q incluir o js desse framework antes né?? qual o q vc usou??

    Já ví alguns códigos similares mas fiquei meio confuso com esse seu.

  2. Bom, entre essas temos a função Ajax Run, que neste exemplo não é utilizada, mas que na classe de manipulação de ajax que criamos existe para outra aplicação. Não utilizamos qualquer outro framework, pois quando esta classe foi apresentada tinha o intuito de ser simples, didática e introdutória. Por isso não usei outro framework.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>