Escolar Documentos
Profissional Documentos
Cultura Documentos
AJAX acrnimo de Asynchronous JavaScript And XML. um tipo de programao que se tornou popular in 2005 pela Google (com Google Suggest). AJAX no uma nova linguagem de programao, mas uma nova forma de utilizar os padres existentes. Com o AJAX se pode criar aplicaes WEB melhores, mais rpidos e mais amigveis. AJAX baseado em JavaScript e requisies HTTP. Com AJAX, o JavaScript se comunica diretamente com o servidor utilizando o objeto XMLHttpRequest do JavaScript. Com este objeto se pode trocar dados com um servidor WEB sem a necessidade de recarregar a pgina. AJAX utiliza a transferncia de dados assncrona entre o navegador e o servidor WEB, permitindo que as pginas WEB faam pequenas requisies ao servidor WEB no lugar de uma pgina inteira. Esta tecnologia independe do servidor WEB. AJAX baseado nos seguintes padres WEB: JavaScript, XML, HTML, CSS. Em um cdigo JavaScript tradicional, se desejar receber qualquer informao do banco de dados ou um arquivo do servidor, ou enviar uma informao do usurio para um servidor, ter-se- criar um formulrio HTML e enviar por GET ou POST dados para o servidor. O usurio ter que clicar no boto SUBMIT para enviar e receber as informaes, esperar que o servidor para responder e ento uma nova pgina ser carregada com os resultados. Porque o servidor retorna uma nova pgina cada vez que o usurio submete uma entrada, as aplicaes web so lentas e menos amigveis. Para uma aplicao tradicional, uma pgina pode fazer uma requisio para, e receber uma resposta do servidor WEB sem a necessidade de recarregar a pgina. O usurio ficar na mesma pgina e no notar que o script requisitou pginas, ou enviou dados para o servidor em background.
Objeto XMLHttpRequest
Utilizando o objeto XMLHttpRequest, o programador web pode atualizar uma pgina com dados do servidor sem necessidade de recarregar a pgina. O Google em http://www.google.com/webhp?complete=1&hl=en fez com que AJAX se tornasse popular. Google Suggest esta utilizando objeto XMLHttpRequiest para criar uma interface web dinmica, quando o usurio inicia digitando na caixa de pesquisa, um JavaScript envia as letras para o servidor e o servidor retorna uma lista de sugestes. O objeto XMLHttpRequest suportado por Internet Explorer 5 ou superior, Safri 1.2, Mozilla 1.0 / Firefox, Opera 8+, and Nestscape 7.
Primeiro cria-se uma varivel xmlHttp para manter o objeto XMLHttpRequest. Ento tenta-se criar o objeto com XMLHttp=new XMLHttpRequest(). Isto serve para os navegadores Firefox, Opera e Safri. Se falhar tenta-se com xmlHttp=new ActiveXObject("Msxml2.XMLHTTP") que serve para o Internet Explorer 6.0+, se tambm falhar, tentar xmlHttp=new ActiveXObject("Microsoft.XMLHTTP") que serve para o Internet Explorer 5.5+. Se nenhum dos trs mtodos funcionarem, o usurio possui um navegador muito desatualizado dever ser avisado que no suporta AJAX.
A propriedade onreadystatechange
Depois de uma requisio para o servidor, precisa-se uma funo que possa receber o dado que retornado pelo servidor. A propriedade onreadystatechange armazena a funo que processar a resposta do servidor. O cdigo abaixo define uma funo vazia e inicializa a propriedade onreadystatechange ao mesmo tempo.
xmlHttp.onreadystatechange=function() { // Deve-se escrever um cdigo }
A propriedade readyState
A propriedade readyState carrega a situao (status) da reposta do servidor (servers reponse). Cada vez que muda o valor de readyState, a funo onreadystatechange ser executada. Tabela de possveis valores para a propriedade de onreadystatechange.
Valor 0 1 2 3 4 Descrio A requisio A requisio A requisio A requisio A requisio no foi inicializada foi configurada. foi enviada esta sendo processada esta completa
No exemplo abaixo, apresenta-se um teste (if) na funo onreadystatechange para testar se a resposta esta completa, ou seja, que o dado foi recebido.
xmlHttp.onreadystatechange=function() { if(xmlHttp.readyState==4) { // Recebido dos dados do servidor. } }
A propriedade responseText
O dado enviado de volta do servidor pode ser recuperado com a propriedade responseText. No exemplo ser colocado a hora no campo de entrada na propriedade responseText.
xmlHttp.onreadystatechange=function() { if(xmlHttp.readyState==4) { document.myForm.time.value=xmlHttp.responseText; } }
A funo AJAX ser executada quando o usurio digita algo no campo nome. O arquivo testeAjax.html agora fica parecido com o seguinte cdigo:
<html> <body> <script type="text/javascript"> function ajaxFunction() { var xmlHttp; try { // Firefox, Opera 8.0+, Safari xmlHttp=new XMLHttpRequest(); } catch (e) { // Internet Explorer try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { alert("Seu navegador no suporta AJAX!"); return false; } } } xmlHttp.onreadystatechange=function() { if(xmlHttp.readyState==4) { document.myForm.time.value=xmlHttp.responseText; } } xmlHttp.open("GET","hora.php",true); xmlHttp.send(null); } </script> <form name="myForm"> Nome: <input type="text" onkeyup="ajaxFunction();" name="nome" /> Hora: <input type="text" name="time" /> </form> </body> </html>
O cdigo baixo apresenta a hora do servidor e deve ser gravado com o nome hora.php. A propriedade responseText armazenar a data que retorna do servidor.
<? $d = getdate(); print str_pad($d['hours'],2,"0", STR_PAD_LEFT) .':'.str_pad($d['minutes'],2,"0",STR_PAD_LEFT) .':'.str_pad($d['seconds'],2,"0", STR_PAD_LEFT); ?>
Abaixo se apresenta o resultado da execuo dos scripts apresentados at o momento. A cada letra digitada apresentado a hora do sistema sem a necessidade de recarregar a pgina.
Na linha 15 existe um div denominado txtHint que utilizado como um repositrio das informaes recuperadas do servidor WEB. Quando o usurio seleciona um dado, a funo denominada showCD executada. A execuo da funo ativada pele evento onchange. O cdigo JavaScript armazenado no arquivo selectcd.js:
var xmlHttp function showCD(str) { xmlHttp=GetXmlHttpObject(); if (xmlHttp==null) { alert ("Your browser does not support AJAX!"); return; } var url="getcd.php"; url=url+"?q="+str; url=url+"&sid="+Math.random(); xmlHttp.onreadystatechange=stateChanged; xmlHttp.open("GET",url,true);
xmlHttp.send(null); } function stateChanged() { if (xmlHttp.readyState==4) { document.getElementById("txtHint").innerHTML=xmlHttp.responseText; } } function GetXmlHttpObject() { var xmlHttp=null; try { // Firefox, Opera 8.0+, Safari xmlHttp=new XMLHttpRequest(); } catch (e) { // Internet Explorer try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } } return xmlHttp; }
A funo showCD() executada quando usurio selecionar um item da caixa de seleo. 1. Chama a funo GetXmlHttpObject para criar um objeto XMLHTTP. 2. Define o URL (nome do arquivo) para ser enviado para o servidor. 3. Adiciona um parmetro (q) para a URL com o contedo do campo de entrada. 4. Adiciona um nmero randmico para prevenir que o servidor utilize um arquivo em cach. 5. Chama a funo stateChanged() quando um mudana disparada. 6. Abre o objeto XMLHTTP com a URL dada. 7. Envia um requisio http para o servidor.
A pgina PHP
A pgina chamada pelo JavaScript um arquivo PHP denominado getcd.php. A pgina abaixo escrita em PHP 5 utiliza a biblioteca XMLDOM para carregar um documento XML.
<?php $q=$_GET["q"]; $xmlDoc = new DOMDocument(); $xmlDoc->load("cd_catalog.xml"); $x=$xmlDoc->getElementsByTagName('ARTIST'); for ($i=0; $i<=$x->length-1; $i++) { //Process only element nodes
if ($x->item($i)->nodeType==1) { if ($x->item($i)->childNodes->item(0)->nodeValue == $q) { $y=($x->item($i)->parentNode); } } } $cd=($y->childNodes); for ($i=0;$i<$cd->length;$i++) { //Process only element nodes if ($cd->item($i)->nodeType==1) { echo($cd->item($i)->nodeName); echo(": "); echo($cd->item($i)->childNodes->item(0)->nodeValue); echo("<br />"); } } ?>
Quando a consulta enviada do JavaScript para o PHP ocorre: PHP cria um objeto XMLDOM do arquivo cd_catalog.xml. Todos os elementos (nodetypes=1) (Artistas) entram em um lao para encontrar um nome que seja igual ao nome enviado do JavaScript. O CD contendo o nome do artista encontrado. A informao do lbum enviada para o txtHint. Documento XML denominado cd_catalog.xml.
<?xml version="1.0" encoding="ISO-8859-1"?> <!-- Edited with XML Spy v2007 (http://www.altova.com) --> <CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> <CD> <TITLE>Hide your heart</TITLE> <ARTIST>Bonnie Tyler</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>CBS Records</COMPANY> <PRICE>9.90</PRICE> <YEAR>1988</YEAR> </CD> <CD> <TITLE>Greatest Hits</TITLE> <ARTIST>Dolly Parton</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>RCA</COMPANY> <PRICE>9.90</PRICE> <YEAR>1982</YEAR> </CD> </CATALOG>
Vale notar agora que o campo que ser atualizado agora <span> ao invs de <div>, mas o javascript de chamada da url praticamente idntico, ento o que muda a atribuio da resposta ao elemento HTML (nesse caso o txtHint).
A resposta do Servlet o cdigo fonte de um componente Select contendo as cidades do estado recebido como parmetro. Esse contedo visualizado no navegador no lugar do span do HTML, porm o cdigo fonte da pgina no alterado. Pgina HTML antes da seleo do estado: