52 :: tutorial AJAX Introdução Parte 1 Elcio Ferreira Desenvolvedor e instrutor em padrões web http://elcio.com.br/ Uma das facetas do trabalho com internet que mais uma área da página fazendo requisições em segundo plano me apaixona é a quantidade de mudanças com que temos ao servidor, sem realizar uma navegação completa ou re- que conviver. Sou um sujeito ávido por novidades, extre- carregar a página atual. mamente crédulo no futuro, sempre achando que vamos O fato de essa conexão ser assíncrona é de grande encontrar um jeito melhor de fazer as coisas que já faze- valor. Você pode, por exemplo, solicitar do usuário o CEP, mos. É por isso que, há alguns anos, quando ouvi falar e-mail e senha como os primeiros dados. Após ele preen- de padrões web e tableless pela primeira vez, corri para cher o CEP, você pode buscar o endereço dele no servidor, estudar o assunto. enquanto ele digita seu e-mail e senha. Em seguida, você É por isso também que AJAX tem me empolgado tan- pode verificar a disponibilidade daquele e-mail para cadas- to. Já era tempo de inventarmos uma maneira melhor de tro, enquanto ele confere seu endereço. Isso tem grande interagir com os usuários no lado do cliente. HTML e CSS impacto sobre a experiência do usuário, pois ele não pre- são excelentes respostas para a publicação de conteúdo, cisa ficar esperando pela carga dos dados. mas quando falamos de aplicações web suas capacidades Quem inventou isso? são bastante limitadas. Dessa forma, o AJAX dá aos desen- Talvez seja essa a primeira pergunta que muita gente volvedores possibilidades que simplesmente não existiam vai fazer ao conhecer os fatos básicos sobre AJAX. Onde antes. Hoje, podemos criar aplicações com um novo nível surgiu? Quem inventou? Na verdade, não podemos apon- de interação, sem abrir mão da simplicidade de manuten- tar o nome do criador. Não é uma linguagem de programa- ção, do código leve e padronizado e da acessibilidade. ção ou uma tecnologia, é uma maneira nova de se utilizar Se você ainda acha que esse papo é todo hype, e a tecnologias e linguagens já existentes. Ao trabalhar com moda logo vai passar, sugiro que teste, em seqüência, o AJAX, construímos em cima do HTML e CSS que já temos, GMail, o Google Maps, o Flickr e o Basecamp. Você vai usando Javascript, DOM e o objeto XMLHttpRequest. notar que não estamos falando de uma tecnologia nova Nada disso é uma invenção nova ou revolucionária. com nome bonito, mas de algo que muda realmente a ex- AJAX é uma maneira de se usar essas tecnologias em con- periência do usuário. junto. Esse tipo de coisa já vem sendo utilizada há algum O que é AJAX? tempo. Minha primeira aplicação com XMLHttp foi cons- O nome AJAX é uma sigla para “Asynchronous Ja- truída em 1999 e, naturalmente, só funcionava em Internet vaScript and XML”. Trata-se de uma maneira de fazer com Explorer. Onde está então a novidade? Por que agora está que seu navegador, com Javascript, carregue conteúdo do todo mundo falando do tal do AJAX? servidor sem recarregar a página atual. Você pode, por A forma como usávamos XMLHttp há era um grande exemplo, verificar os dados digitados em um formulário, complicador sobre nossas aplicações. Nossos arquivos de preencher o endereço baseado no CEP, exibir uma mensa- servidor eram exclusivamente feitos para serem entendidos gem de ajuda sobre parte de sua tela ou mesmo recarregar por nossas próprias aplicações, o que eliminava qualquer tutorial :: 53 possibilidade de mash-ups ou outros usos Web 2.0 deles. Acessibilidade Nossos códigos eram complexos, construídos em cima de A grande preocupação com a acessibilidade também HTML e CSS muito complexos. Hoje, realmente, as coisas é uma das boas conseqüências da forma de pensar que mudaram. adquirimos com os padrões web. Ouvíamos falar muito A simplicidade dos padrões web pouco sobre isso e agora todos nos preocupamos em como A primeira coisa que mudou de lá para cá foi a grande nosso site vai estar num leitor de telas ou num browser de descomplicação do desenvolvimento web, os padrões do texto. Isso também tem boas conseqüências em relação à W3C. Hoje, o código cliente de nossas aplicações é todo indexação de nosso conteúdo pelos robôs de busca. muito mais simples. Nosso HTML foi reduzido para um ter- Naquela época, não tínhamos ferramentas para ço de seu tamanho. Nosso código é padronizado, muito tornar qualquer trabalho minimamente interessante com parecido com o código de milhares de outros sites. Javascript realmente acessível. Hoje é possível, com a expe Essa simplicidade nos deixou mal acostumados. Não riência que adquirimos e com a evolução dos navegadores, queremos mais trabalhar com código complexo. É nesse escrever verdadeiras aplicações de uma só página que contexto que surgem as aplicações AJAX. Embora, é claro, permanecem completamente acessíveis quando usadas em grandes aplicações, alguma complexidade no código de um navegador sem suporte a AJAX. seja algo quase inevitável (imagine o tamanho do código do É importante que você note que construir aplicações GMail), nosso código Javascript é hoje muito mais simples com AJAX não as torna automaticamente acessíveis, da do que há alguns anos. E isso não é um mérito do Javas- mesma maneira que não as torna automaticamente apli- cript, mas da mudança em nossa maneira de pensar. cações Web 2.0. É uma escolha do desenvolvedor tornar Javascript, DOM e XMLHttpRequest sua aplicação acessível, e ele precisa trabalhar para isso. Outro fato que torna as coisas diferentes atualmente Mas esse trabalho de acessibilidade é muito mais simples é a maturidade dos navegadores em relação ao Javascript, quando trabalhamos com AJAX, principalmente se nosso DOM e XMLHttpRequest. As coisas eram verdadeiramen- método de trabalho foi construído pensando também em te terríveis no tempo do Netscape 4. Hoje, é tarefa trivial acessibilidade, do que era antigamente com nosso velho escrever Javascript que funcione bem em qualquer navega- código complexo. dor. Graças a um padrão chamado DOM (Document Object XMLHttpRequest Model), existe uma maneira comum de se acessar e alterar A tecnologia central em AJAX é o XMLHttpRequest. objetos HTML via Javascript. Todos os navegadores moder- Trata-se de um objeto Javascript que pode ser usado para nos suportam adequadamente o DOM, e mesmo o Internet fazer requisições ao servidor web, em segundo plano, sem Explorer, o que tem o pior suporte, oferece recursos para congelar o navegador ou recarregar a página atual. O obje- que possamos trabalhar satisfatoriamente. to XMLHttpRequest é hoje parte da especificação do DOM, Convém dizer que o conhecimento de Javascript e nível 3. Ou seja, qualquer navegador que queira oferecer DOM é essencial para o bom trabalho com AJAX. Se você suporte aos padrões precisa implementar o objeto XM- tiver dificuldades em acompanhar esta série de artigos, LHttpRequest. sugiro que leia primeiro um tutorial que escrevi sobre o assunto em http://elcio.com.br/crossbrowser. Infelizmente, as coisas não são tão simples assim. Aqui, novamente, o Internet Explorer se comporta de maneira diferente dos demais, gerando dores de cabeça. Entretanto, não é difícil lidar com isso. Precisaremos primeiro 54 :: tutorial entender o porquê das diferenças, através da história do Os outros objeto XMLHttpRequest. Nasceu no Internet Explorer Aqui um fato que vai surpreender a muitos: o primeiro navegador a oferecer suporte a XMLHttpRequest foi o Internet Explorer 5. De fato, a idéia ganhou o mundo com o navegador da Microsoft, que criou um objeto ActiveX para fazer esse trabalho. O Internet Explorer 5 era um navegador à frente de seu tempo. Foi o primeiro a suportar CSS 2 e, embora consideremos seu suporte aos padrões sofrível, conseguimos Todos os navegadores modernos suportam AJAX fazer sites para ele até hoje. Basta pensar que o maior concorrente na época era o Netscape 4 e você vai entender o que quero dizer. Todos os outros navegadores modernos incluem o objeto XMLHttpRequest, definido pela especificação do O verdadeiro problema com o Internet Explorer não W3C, ao invés do ActiveX da Microsoft. Entre estes nave- é o fato de ele ser um navegador ruim, apenas o fato de gadores estão todos os baseados em Mozilla, como Firefox ele ser um navegador antigo. A versão final do Internet e Netscape, o Opera, a partir da versão 7, o Konqueror, a Explorer 6 saiu no final de 2001. É tempo demais. Pois bem, partir da versão 3.4, e o Safari. Nestes navegadores, para vejamos como se criava um objeto XMLHttp (o nome que a criar um objeto XMLHttpRequest, basta: Microsoft deu ao objeto) no Internet Explorer 5: var xmlhttp=new XMLHttpRequest() var xmlhttp=new ActiveXObject(“Microsoft.XMLHttp”) É interessante notar também que esse objeto tem Junto com o Internet Explorer 6, a Microsoft distribuiu muito mais recursos e possibilidades que o ActiveX da uma nova versão de seu objeto ActiveX, que corrigia alguns Microsoft. Podemos, por exemplo, obter o resultado incômodos erros da versão anterior. Assim, no Internet Ex- c o n f o r m e e l e é c a r re g a d o e n ã o a p e n a s a o f i n a l d a plorer 6, essa sintaxe mudou um pouco: requisição. Isso nos permite criar barras de progresso ou exibir um conteúdo extenso à medida que é carregado. var xmlhttp=new ActiveXObject(“MSXML2.XMLHttp”) Infelizmente, nada disso é possível no Internet Explorer. Na segunda parte deste tutorial (serão cinco no total), vamos apresentar a construção de um formulário de cadastro, usando AJAX. Até a próxima!