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

Mais conteúdo relacionado

ODP
Introdução a Desenvolvimento Web
PDF
Ajax como comecar
PDF
De Web Services RESTful a Aplicações Mashup
PDF
Consumindo dados via web service no android
PDF
8159540 Tutorial De Ajax
PPTX
Flávio Almeida MEAN Stack "to be or not to be mean"
PDF
REST Web Services com Java
PDF
Escrevendo modulos python com rust
Introdução a Desenvolvimento Web
Ajax como comecar
De Web Services RESTful a Aplicações Mashup
Consumindo dados via web service no android
8159540 Tutorial De Ajax
Flávio Almeida MEAN Stack "to be or not to be mean"
REST Web Services com Java
Escrevendo modulos python com rust

Semelhante a o que é ajax (20)

PDF
Web 2.0 e AJAX - Parte 2 / 3
PPT
PHP e AJAX: do Request ao Framework
PPT
PHP e Ajax com XAJAX
PPT
introdução a ajax
PDF
Tutorial de ajax
PDF
Ajax O Objeto Xml Http Request Parte 1
PPT
PHP e AJAX: do Request ao Framework
PPT
Ajax (Asynchronous Javascript And Xml)
PDF
Ajax O Objeto Xml Http Request Parte 2
PDF
Aplicações Web com AJAX - Er Galvão Abbott
PDF
Apostila ajax
PDF
Aplicacoes Web Com AJAX
PDF
Apostila ajax
PDF
ODP
Tw Course Ajax 2007 Ap01
PDF
Implementando MVC com AJAX
PPT
Frameworks Ajax
PPTX
Palestra Sobre REST
PDF
Ajax O Objeto Xml Http Request Parte 3
Web 2.0 e AJAX - Parte 2 / 3
PHP e AJAX: do Request ao Framework
PHP e Ajax com XAJAX
introdução a ajax
Tutorial de ajax
Ajax O Objeto Xml Http Request Parte 1
PHP e AJAX: do Request ao Framework
Ajax (Asynchronous Javascript And Xml)
Ajax O Objeto Xml Http Request Parte 2
Aplicações Web com AJAX - Er Galvão Abbott
Apostila ajax
Aplicacoes Web Com AJAX
Apostila ajax
Tw Course Ajax 2007 Ap01
Implementando MVC com AJAX
Frameworks Ajax
Palestra Sobre REST
Ajax O Objeto Xml Http Request Parte 3
Anúncio

Mais de elliando dias (20)

PDF
Clojurescript slides
PDF
Why you should be excited about ClojureScript
PDF
Functional Programming with Immutable Data Structures
PPT
Nomenclatura e peças de container
PDF
Geometria Projetiva
PDF
Polyglot and Poly-paradigm Programming for Better Agility
PDF
Javascript Libraries
PDF
How to Make an Eight Bit Computer and Save the World!
PDF
Ragel talk
PDF
A Practical Guide to Connecting Hardware to the Web
PDF
Introdução ao Arduino
PDF
Minicurso arduino
PDF
Incanter Data Sorcery
PDF
PDF
Fab.in.a.box - Fab Academy: Machine Design
PDF
The Digital Revolution: Machines that makes
PDF
Hadoop + Clojure
PDF
Hadoop - Simple. Scalable.
PDF
Hadoop and Hive Development at Facebook
PDF
Multi-core Parallelization in Clojure - a Case Study
Clojurescript slides
Why you should be excited about ClojureScript
Functional Programming with Immutable Data Structures
Nomenclatura e peças de container
Geometria Projetiva
Polyglot and Poly-paradigm Programming for Better Agility
Javascript Libraries
How to Make an Eight Bit Computer and Save the World!
Ragel talk
A Practical Guide to Connecting Hardware to the Web
Introdução ao Arduino
Minicurso arduino
Incanter Data Sorcery
Fab.in.a.box - Fab Academy: Machine Design
The Digital Revolution: Machines that makes
Hadoop + Clojure
Hadoop - Simple. Scalable.
Hadoop and Hive Development at Facebook
Multi-core Parallelization in Clojure - a Case Study
Anúncio

Último (19)

PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Aula 18 - Manipulacao De Arquivos python
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
Apple Pippin Uma breve introdução. - David Glotz
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Custos e liquidação no SAP Transportation Management, TM130 Col18
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
COBITxITIL-Entenda as diferença em uso governança TI
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Aula 18 - Manipulacao De Arquivos python
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Processos na gestão de transportes, TM100 Col18
Aula04-Academia Heri- Tecnologia Geral 2025
Apple Pippin Uma breve introdução. - David Glotz
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14

o que é ajax

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