AJAX Flávio Luiz Schiavoni – EspWeb UEM - 2006
O que é Ajax? <ul><li>Asynchronous Javascript And XML </li></ul><ul><li>“ AJAX é um conjunto de tecnologias para desenvolv...
O que é Ajax? <ul><li>É uma linguagem? </li></ul><ul><li>Moda passageira? </li></ul><ul><li>É um framework? </li></ul><ul>...
O que é Ajax? <ul><li>A tecnologia por trás do AJAX existe já há algum tempo.  </li></ul><ul><li>Javascript + HTML + CSS  ...
Modelo tradicional Flávio Luiz Schiavoni – EspWeb UEM - 2006 http://pt.wikipedia.org/wiki/AJAX_(programa%C3%A7%C3%A3o)
Com Ajax Flávio Luiz Schiavoni – EspWeb UEM - 2006
Porque comunicação Assícrona? <ul><li>Com Javascript é possível: </li></ul><ul><ul><li>Arrastar e soltar (Drag´n´Drop) </l...
Exemplo: webmail <ul><li>Arrastar e soltar emails lidos para a lixeira </li></ul><ul><li>Buscar lista de endereços para en...
Como funciona? <ul><li>XMLHttpRequest </li></ul><ul><ul><li>Função Javascript disponível desde 1998 em browser como IE e N...
Revisão Javascript para Ajax Flávio Luiz Schiavoni – EspWeb UEM - 2006
Pegando elementos do documento  <ul><li>document.getElementById(‘id’) </li></ul><ul><ul><li>Id único na página. Retorna ap...
Adicionando e removendo <ul><li><script type=&quot;text/javascript&quot;> </li></ul><ul><li>function createDiv(){ </li></u...
Adicionando Eventos <ul><li>function  digaQueClicou (){ </li></ul><ul><li>alert('Clicou no div');  </li></ul><ul><li>}  </...
XMLHttpRequest Flávio Luiz Schiavoni – EspWeb UEM - 2006
Criando a requisição <ul><li>var req = null;  </li></ul><ul><li>if (window.XMLHttpRequest){ //    Mozilla! </li></ul><ul>...
Recebendo resposta <ul><li>req.onreadystatechange = function(){  </li></ul><ul><li>if(req.readyState == 4){ </li></ul><ul>...
Propriedades do objeto <ul><li>onreadystatechange   - Associa um evento que será chamado a cada alteração do objeto </li><...
Estado do objeto: readyState <ul><li>0 – O objeto não foi inicializado com dados </li></ul><ul><li>1 – O objeto está carre...
Estado da resposta <ul><li>200 – OK  </li></ul><ul><li>204 – Documento vazio </li></ul><ul><li>301 – Documento migrado par...
Métodos <ul><li>abort()  – Cancela a requisição </li></ul><ul><li>getAllResponseHeaders()  - retorna todos os cabeçalho HT...
Método open() <ul><li>O primeiro parâmetro é o método pedido HTML – GET, POST, HEAD ou outro método qualquer.  Mantenha o ...
Métodos HTTP <ul><li>GET  - método mais comum, requisição de uma página </li></ul><ul><li>HEAD – Apenas o cabeçalho do GET...
Atenção! Flávio Luiz Schiavoni – EspWeb UEM - 2006 O método open(“método”,”url”,false) só é capaz de acessar “url” dentro ...
Método send() <ul><li>O parâmetro do método send() pode ser constituído por quaisquer dados que pretenda enviar ao servido...
onreadystatechange <ul><li>req.onreadystatechange = alertContents;  </li></ul><ul><li>function alertContents(){ </li></ul>...
Cadê o X do Ajax? XML Flávio Luiz Schiavoni – EspWeb UEM - 2006
Porque XML? <ul><li>Separação do conteúdo da formatação </li></ul><ul><li>Simplicidade e Legibilidade, tanto para humanos ...
Exemplo de XML <ul><li><?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> </li></ul><ul><li><Receita nome=&quot;pã...
Requisição para XML <ul><li>req.responseText    req.responseXML  </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006
XML DOM - Árvores Flávio Luiz Schiavoni – EspWeb UEM - 2006
Javascript DOM - propriedades <ul><li>childNodes  – Array de nós filhos </li></ul><ul><li>firstChild  – Primeiro nó filho ...
Javascript DOM - métodos Flávio Luiz Schiavoni – EspWeb UEM - 2006 AppendChild  – adiciona um novo nó filho HasChildNodes ...
Ajax e WebService <ul><li>Possibilidade de comunicação assíncrona com servidor </li></ul><ul><li>Troca de grande quantidad...
Ajax Framework <ul><li>Prós </li></ul><ul><ul><li>Várias funções desenvolvidas </li></ul></ul><ul><ul><li>Métodos testados...
Por que não Ajax? <ul><li>Não há o botão voltar </li></ul><ul><li>Problema de compatibilidade com navegadores </li></ul><u...
Exemplos <ul><li>http://www .gmail.com </li></ul><ul><li>http://www.flickr.com </li></ul><ul><li>http://labs.google.com/su...
Referências <ul><li>http://www.ajaxprojects.com/ </li></ul><ul><li>http://www.imasters.com.br </li></ul><ul><li>http://www...
Próximos SlideShares
Carregando em…5
×

o que é ajax

1.901 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.901
No SlideShare
0
A partir de incorporações
0
Número de incorporações
8
Ações
Compartilhamentos
0
Downloads
36
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

o que é ajax

  1. 1. AJAX Flávio Luiz Schiavoni – EspWeb UEM - 2006
  2. 2. O que é Ajax? <ul><li>Asynchronous Javascript And XML </li></ul><ul><li>“ AJAX é um conjunto de tecnologias para desenvolvimento para Internet e que possibilita uma comunicação assíncrona com o servidor – onde apenas os dados atualizados são retornados para o usuário, e não mais todo o documento HTML , como era anteriormente. Assim, o Ajax reduz um grave problema natural das tecnologias no qual as páginas da web apóiam-se (o HTML e o HTTP): a atualização (refresh) de tela.” </li></ul><ul><li>http://www.cfgigolo.com/archives/2006/03/adobe_flex_e_ajax_desmistifica.html </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006
  3. 3. O que é Ajax? <ul><li>É uma linguagem? </li></ul><ul><li>Moda passageira? </li></ul><ul><li>É um framework? </li></ul><ul><li>Aonde eu baixo? </li></ul><ul><li>Como instala? </li></ul><ul><li>Explica direito! </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006
  4. 4. O que é Ajax? <ul><li>A tecnologia por trás do AJAX existe já há algum tempo. </li></ul><ul><li>Javascript + HTML + CSS + XMLHttpRequest * </li></ul><ul><li>O que surgiu foi o padrão AJAX. </li></ul><ul><li>* Requisições “Assíncronas” (Javascript atualiza a página e o usuário “não vê” a requisição). </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006
  5. 5. Modelo tradicional Flávio Luiz Schiavoni – EspWeb UEM - 2006 http://pt.wikipedia.org/wiki/AJAX_(programa%C3%A7%C3%A3o)
  6. 6. Com Ajax Flávio Luiz Schiavoni – EspWeb UEM - 2006
  7. 7. Porque comunicação Assícrona? <ul><li>Com Javascript é possível: </li></ul><ul><ul><li>Arrastar e soltar (Drag´n´Drop) </li></ul></ul><ul><ul><li>Menus pop-up </li></ul></ul><ul><ul><li>Ordenar listas </li></ul></ul><ul><ul><li>Efetuar cálculos </li></ul></ul><ul><ul><li>Validar formulários </li></ul></ul><ul><ul><li>... (Ver exemplos da aula de Javascript) </li></ul></ul><ul><li>De que adianta mostrar ao usuário um resultado que não corresponde aos dados do servidor? </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006
  8. 8. Exemplo: webmail <ul><li>Arrastar e soltar emails lidos para a lixeira </li></ul><ul><li>Buscar lista de endereços para enviar novos emails </li></ul><ul><li>Adicionar usuários a estas listas </li></ul><ul><li>Teclas de atalho (Ctrl + D = Remover) </li></ul><ul><li>Se os emails arrastados para a lixeira não forem apagados? </li></ul><ul><li>Como avisar o servidor de uma ação Javascript? </li></ul><ul><li>XMLHttpRequest! </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006
  9. 9. Como funciona? <ul><li>XMLHttpRequest </li></ul><ul><ul><li>Função Javascript disponível desde 1998 em browser como IE e Netscape </li></ul></ul><ul><ul><li>Cria requisições para o servidor de maneira assíncrona, ou seja, não é necessário esperar a resposta. </li></ul></ul><ul><ul><li>Várias coisas podem acontecer ao mesmo tempo </li></ul></ul><ul><ul><li>Comunicação cliente-servidor (requisição e reposta) </li></ul></ul><ul><ul><li>Funciona a partir de eventos Javascript </li></ul></ul><ul><ul><li>Pode retornar eventos Javascript </li></ul></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006
  10. 10. Revisão Javascript para Ajax Flávio Luiz Schiavoni – EspWeb UEM - 2006
  11. 11. Pegando elementos do documento <ul><li>document.getElementById(‘id’) </li></ul><ul><ul><li>Id único na página. Retorna apenas um elemento </li></ul></ul><ul><li>getElementsByTagName(‘tag’) </li></ul><ul><ul><li>Retorna todos os elementos definidos por esta tag </li></ul></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006 elementoPorId.html elementoPorNomeTag.html
  12. 12. Adicionando e removendo <ul><li><script type=&quot;text/javascript&quot;> </li></ul><ul><li>function createDiv(){ </li></ul><ul><li>var mydiv = document.createElement('div'); </li></ul><ul><li>mydiv.className = 'newdiv'; </li></ul><ul><li>mydiv.createAttribute(‘style’); </li></ul><ul><li>document.body.appendChild(mydiv); </li></ul><ul><li>} </li></ul><ul><li>function removeElement(elt) </li></ul><ul><li>{ </li></ul><ul><li>elt.parentNode. removeChild(elt); </li></ul><ul><li>} </li></ul><ul><li></script> </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006 adicionandoElemento.html
  13. 13. Adicionando Eventos <ul><li>function digaQueClicou (){ </li></ul><ul><li>alert('Clicou no div'); </li></ul><ul><li>} </li></ul><ul><li>var elementos = document.getElementsByTagName('DIV'); </li></ul><ul><li>for (var i = 0 ; i < elementos.length ; i++){ </li></ul><ul><li>el = elementos[i]; </li></ul><ul><li>el.style.cursor = 'pointer'; </li></ul><ul><li>if (el.addEventListener){ //  MOZILLA! </li></ul><ul><li>el. addEventListener ('click', digaQueClicou , false); </li></ul><ul><li>} else if (el.attachEvent){ //  IE! </li></ul><ul><li>el. attachEvent ('onclick', digaQueClicou ); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006 adicionandoEventos.html
  14. 14. XMLHttpRequest Flávio Luiz Schiavoni – EspWeb UEM - 2006
  15. 15. Criando a requisição <ul><li>var req = null; </li></ul><ul><li>if (window.XMLHttpRequest){ //  Mozilla! </li></ul><ul><li>req = new XMLHttpRequest(); </li></ul><ul><li>} else if (window.ActiveXObject) {  IE! </li></ul><ul><li>try { </li></ul><ul><li>req = new ActiveXObject(&quot;Msxml2.XMLHTTP&quot;); </li></ul><ul><li>} catch (e){ </li></ul><ul><li>try { </li></ul><ul><li>req = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;); </li></ul><ul><li>} catch (e) {} </li></ul><ul><li>} } </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006
  16. 16. Recebendo resposta <ul><li>req.onreadystatechange = function(){ </li></ul><ul><li>if(req.readyState == 4){ </li></ul><ul><li>if(req.status == 200){ </li></ul><ul><li>//Caso ok req.responseText ou response.XML </li></ul><ul><li>} else{ </li></ul><ul><li>// Caso erro req.statusText </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>}; </li></ul><ul><li>req.open(&quot;GET&quot;, pagina, true); </li></ul><ul><li>req.send(null); </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006 <ul><ul><li>exemploAjax.html </li></ul></ul>
  17. 17. Propriedades do objeto <ul><li>onreadystatechange - Associa um evento que será chamado a cada alteração do objeto </li></ul><ul><li>readyState – Contém o estado do objeto </li></ul><ul><li>responseText – resposta no formato String </li></ul><ul><li>responseXML – resposta no formato XML </li></ul><ul><li>status – estado da requisição no formato numérico </li></ul><ul><li>statusText – estado da requisição no formato texto </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006 Exemplo: redirecionar.html
  18. 18. Estado do objeto: readyState <ul><li>0 – O objeto não foi inicializado com dados </li></ul><ul><li>1 – O objeto está carregando seus dados </li></ul><ul><li>2 – O objeto terminou de carregar seus dados </li></ul><ul><li>3 – O dados do objeto não estão totalmente carregados (usuário já pode interagir) </li></ul><ul><li>4 – Os dados do objeto estão completamente carregados </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006
  19. 19. Estado da resposta <ul><li>200 – OK </li></ul><ul><li>204 – Documento vazio </li></ul><ul><li>301 – Documento migrado para outro endereço </li></ul><ul><li>401 – Não autorizado </li></ul><ul><li>403 - Proibido </li></ul><ul><li>404 – Não encontrado </li></ul><ul><li>408 - Timeout </li></ul><ul><li>500 – Erro no servidor </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006
  20. 20. Métodos <ul><li>abort() – Cancela a requisição </li></ul><ul><li>getAllResponseHeaders() - retorna todos os cabeçalho HTTP no formato String </li></ul><ul><li>getResponseHeader() – retorna o cabeçalho HTTP invocado pelo método </li></ul><ul><li>open() – especifica os atributos necessários para fazer a conexão com o servidor </li></ul><ul><li>setRequestHeader() – Adiciona um conjunto chave / valor para o cabeçalho quando o mesmo for enviado </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006
  21. 21. Método open() <ul><li>O primeiro parâmetro é o método pedido HTML – GET, POST, HEAD ou outro método qualquer. Mantenha o nome do método em maiúsculas. </li></ul><ul><li>O segundo parâmetro é a URL da página que está a pedir. </li></ul><ul><li>O terceiro parâmetro define se o pedido é assíncrono. Se TRUE, a execução da função JavaScript irá continuar enquanto que a resposta do servidor ainda não foi recebida. Isto é o A de AJAX. </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006 open(“método”,”url”,true/false)
  22. 22. Métodos HTTP <ul><li>GET - método mais comum, requisição de uma página </li></ul><ul><li>HEAD – Apenas o cabeçalho do GET </li></ul><ul><li>POST – Similar ao GET. Maior e permite enviar dados </li></ul><ul><li>PUT – Envia uma nova versão do arquivo requisitado </li></ul><ul><li>DELETE – Remove o arquivo requisitado </li></ul><ul><li>TRACE – Envia de volta uma cópia da requisição para monitorar seu progresso </li></ul><ul><li>OPTIONS – Retorna uma lista dos métodos disponíveis </li></ul><ul><li>CONNECT – requisição baseada em proxy para tunel SSL </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006
  23. 23. Atenção! Flávio Luiz Schiavoni – EspWeb UEM - 2006 O método open(“método”,”url”,false) só é capaz de acessar “url” dentro do próprio domínio não sendo capaz de acessar endereços absolutos, ou seja, endereços que começam com http:// www.......
  24. 24. Método send() <ul><li>O parâmetro do método send() pode ser constituído por quaisquer dados que pretenda enviar ao servidor ao enviar (POST) o pedido. </li></ul><ul><li>Valor comum: null ! </li></ul><ul><li>Os dados devem estar sob a forma de uma linha de texto de pergunta, tipo: </li></ul><ul><li>name=value&anothername=othervalue&so=on </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006 Note-se que se pretende enviar ( POST ) dados, você deve alterar o tipo MIME do pedido usando a seguinte linha: req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); De outra forma o servidor irá ignorar os dados.
  25. 25. onreadystatechange <ul><li>req.onreadystatechange = alertContents; </li></ul><ul><li>function alertContents(){ </li></ul><ul><li>// Alguma coisa </li></ul><ul><li>} </li></ul><ul><li>req.onreadystatechange = function(){ </li></ul><ul><li>// Alguma coisa </li></ul><ul><li>}; </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006 O que fazer quando o estado for alterado? Esta função será chamada toda vez que o estado o objeto for alterado, ou seja, 1, 2, 3 e 4
  26. 26. Cadê o X do Ajax? XML Flávio Luiz Schiavoni – EspWeb UEM - 2006
  27. 27. Porque XML? <ul><li>Separação do conteúdo da formatação </li></ul><ul><li>Simplicidade e Legibilidade, tanto para humanos quanto para computadores </li></ul><ul><li>Possibilidade de criação de tags sem limitação </li></ul><ul><li>Criação de arquivos para validação de estrutura (Chamados DTDs) </li></ul><ul><li>Interligação de sistemas distintos </li></ul><ul><li>Concentração na estrutura da informação, e não na sua aparência </li></ul><ul><li>API padrão em várias linguagens (SAX/DOM) </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006
  28. 28. Exemplo de XML <ul><li><?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> </li></ul><ul><li><Receita nome=&quot;pão&quot; tempo_de_preparo=&quot;5 minutos“ tempo_de_cozimento=&quot;1 hora&quot;> </li></ul><ul><li><título>Pão simples</título> </li></ul><ul><li><ingrediente quantidade=&quot;3&quot; unidade=&quot;xícaras&quot;>Farinha</ingrediente> </li></ul><ul><li><ingrediente quantidade=&quot;7&quot; unidade=&quot;gramas&quot;>Fermento</ingrediente> </li></ul><ul><li><ingrediente quantidade=&quot;1.5&quot; unidade=&quot;xícaras&quot; estado=&quot;morna&quot;>Água</ingrediente> </li></ul><ul><li><ingrediente quantidade=&quot;1&quot; unidade=&quot;colheres de chá&quot;>Sal</ingrediente> </li></ul><ul><li><Instruções> </li></ul><ul><li><passo>Misture todos os ingredientes, e dissolva bem.</passo> </li></ul><ul><li><passo>Cubra com um pano e deixe por uma hora em um local morno.</passo> </li></ul><ul><li><passo>Misture novamente, coloque numa bandeja e asse num forno.</passo> </li></ul><ul><li></Instruções> </li></ul><ul><li></Receita> </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006
  29. 29. Requisição para XML <ul><li>req.responseText  req.responseXML </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006
  30. 30. XML DOM - Árvores Flávio Luiz Schiavoni – EspWeb UEM - 2006
  31. 31. Javascript DOM - propriedades <ul><li>childNodes – Array de nós filhos </li></ul><ul><li>firstChild – Primeiro nó filho </li></ul><ul><li>lastChild – Último nó filho </li></ul><ul><li>nodeName – Nome do nó </li></ul><ul><li>nodeType – Tipo do nó </li></ul><ul><li>nodeValue – Valor contido no nó </li></ul><ul><li>nextSibling – Próximo nó com o mesmo pai (irmão) </li></ul><ul><li>previousSibling – Nó anterior com o mesmo pai </li></ul><ul><li>parentNode – Nó pai </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006
  32. 32. Javascript DOM - métodos Flávio Luiz Schiavoni – EspWeb UEM - 2006 AppendChild – adiciona um novo nó filho HasChildNodes – booleano se o nó tem filhos RemoveChild – remove um nó filho CreateAttribute – Cria um novo atributo para o elemento CreateElement – Cria um novo elemento documento CreateTextNode – Cria um item texto
  33. 33. Ajax e WebService <ul><li>Possibilidade de comunicação assíncrona com servidor </li></ul><ul><li>Troca de grande quantidade de dados </li></ul><ul><li>Integração </li></ul><ul><li>http://republicavirtual.com.br/web_cep.php?cep=87013230 </li></ul><ul><li>http://cotacao.republicavirtual.com.br/web_cotacao.php?formato=xml </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006 Exemplo: cep.jsp e buscaCEP.jsp
  34. 34. Ajax Framework <ul><li>Prós </li></ul><ul><ul><li>Várias funções desenvolvidas </li></ul></ul><ul><ul><li>Métodos testados </li></ul></ul><ul><ul><li>Padrões de projetos </li></ul></ul><ul><ul><li>Rápida integração </li></ul></ul><ul><li>http://script.aculo.us/ </li></ul><ul><li>http://openrico.org/ </li></ul><ul><li>http ://getahead.ltd.uk/dwr </li></ul><ul><li>http://developer.yahoo.com/yui </li></ul><ul><li>http://mochikit.com </li></ul><ul><li>http://code.google.com </li></ul><ul><li>http://www.ajaxprojects.com/ </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006 <ul><li>Contras </li></ul><ul><ul><li>Tempo de aprendizado </li></ul></ul><ul><ul><li>Qual framework? </li></ul></ul><ul><ul><li>Integração server side </li></ul></ul>
  35. 35. Por que não Ajax? <ul><li>Não há o botão voltar </li></ul><ul><li>Problema de compatibilidade com navegadores </li></ul><ul><li>Páginas mais pesadas </li></ul><ul><li>“ Agora você vê, agora você não vê” </li></ul><ul><li>Necessidade de interação com o usuário </li></ul><ul><li>Possibilidade de desabilitar javascript </li></ul><ul><li>Código visível </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006
  36. 36. Exemplos <ul><li>http://www .gmail.com </li></ul><ul><li>http://www.flickr.com </li></ul><ul><li>http://labs.google.com/suggest </li></ul><ul><li>http://www.backbase.com/ </li></ul><ul><li>http:// www.start.com/3/ </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006
  37. 37. Referências <ul><li>http://www.ajaxprojects.com/ </li></ul><ul><li>http://www.imasters.com.br </li></ul><ul><li>http://www.w3.org/DOM/ </li></ul><ul><li>http://republicavirtual.com.br/web_cep.php?cep=87013230 </li></ul><ul><li>http://cotacao.republicavirtual.com.br/web_cotacao.php?formato=xml </li></ul><ul><li>http://wiki.script.aculo.us/scriptaculous/show/Demos </li></ul><ul><li>http://openrico.org/ </li></ul><ul><li>http://getahead.ltd.uk/dwr </li></ul><ul><li>http://code.google.com/ </li></ul><ul><li>http://developer.yahoo.com/yui </li></ul><ul><li>http://www.gmail.com </li></ul><ul><li>http://www.flickr.com </li></ul><ul><li>http:// labs.google.com/suggest </li></ul><ul><li>http://www.backbase.com/ </li></ul><ul><li>http://www.start.com/3/ </li></ul><ul><li>http://developer.mozilla.org/pt/docs/AJAX </li></ul>Flávio Luiz Schiavoni – EspWeb UEM - 2006

×