Escolar Documentos
Profissional Documentos
Cultura Documentos
210 Ajax 004 PDF
210 Ajax 004 PDF
18 de agosto de 2006
Apresentao baseada em padres, usando XHTML e CSS; Exposio e interao dinmica usando o DOM; Intercmbio e manipulao de dados usando XML e XSLT; Recuperao assncrona de dados usando o objeto XMLHttpRequest; Javascript unindo todas elas em conjunto.
O modelo clssico de aplicao web trabalha assim: A maioria das aes do usurio na interface dispara uma solicitao HTTP para o servidor web. O servidor processa algo recuperando dados, mastigando nmeros, conversando com vrios sistemas legados e ento retorna uma pgina HTML para o cliente. um modelo adaptado do uso original da web como um agente de hipertexto, porm o que faz a web boa para hipertexto no necessariamente faz ela boa para aplicaes de software. Esta aproximao possui muito dos sentidos tcnicos, mas no faz tudo que um usurio experiente poderia fazer. Enquanto o servidor est fazendo seu trabalho, o que o usurio estar fazendo? O que certo, esperando. E a cada etapa em uma tarefa, o usurio aguarda mais uma vez. 1
Obviamente, se ns estivssemos projetando a web do nada para aplicaes, no faramos com que os usurios esperassem em vo. Uma vez que a interface est carregada, por que a interao do usurio deveria parar a cada vez que a aplicao precisasse de algo do servidor? Na realidade, por que o usurio deveria ver a aplicao ir ao servidor toda vez? A maior vantagem das aplicaes AJAX que elas rodam no prprio navegador web. Ento, para estar hbil a executar aplicaes AJAX, bastar possuir algum dos navegadores modernos, ou seja, lanados aps 2001, so eles: Mozilla Firefox, Internet Explorer 5+, Opera, Konqueror e Safari.
2 A Classe Assncrona
Para se fazer um pedido HTTP ao servidor usando Javascript, voc precisa de um objeto que disponibiliza essa funcionalidade. Tal classe foi primeiro introduzida no Internet Ex2
plorer sob a forma de um objeto ActiveX chamado XMLHTTP, ento, o Mozilla, o Safari e outros browsers seguiram-se, implementando uma classe de nome XMLHttpRequest que suportava os mtodos e as propriedades do objeto ActiveX original da Microsoft. O cdigo abaixo mostra a forma genrica de instanciar um objeto que prover os mecanismos para pedidos assncronos. Cdigo 1: 'ajaxInit.js'
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
function ajaxInit () { var xmlhttp ; try { xmlhttp = new XMLHttpRequest ( ) ; } catch ( ee ) { try { xmlhttp = new ActiveXObject ( " Msxml2 . XMLHTTP " ) ; } catch ( e ) { try { xmlhttp = new ActiveXObject ( " Microsoft . XMLHTTP " ) ; } c a t c h (E) { xmlhttp = f a l s e ; } } } }
return xmlhttp ;
2.1 Atributos
Segue abaixo alguns dos atributos do objeto de conexo assncrona. readyState : Cdigo que diz o status da solicitao assncrona, ele varia de 0 at 5
status : Status do retorno do HTML, so os cdigos padres do HTML 200 ok, 400
responseText : Retorna a cadeia de caracteres que o servidor enviou. responseXml : Retorna o XML o servidor enviou. onreadystatechange : Dene qual funo ser chamada para fazer a manipulao
Vamos ver o que que esta funo deve fazer. Primeiro, a funo precisa de vericar o estado do pedido, se o estado possui o valor 4, isso signica que a totalidade da resposta do servidor foi recebida e que pode continuar a process-la vontade, a prxima coisa a vericar o cdigo do estado da resposta HTTP do servidor. Para os nossos objetivos s estamos interessados na resposta 200 OK.
2.2 Mtodos
Segue abaixo alguns dos mtodos do objeto de conexo assncrona.
mode: Tipo da requisio, GET ou POST url: URL do objeto solicitado no modo assncrono, pro questes de segurana. O Firefox no permite que a URL esteja em um servidor diferente da pgina que esta fazendo a solicitao. boolean: true (assncrono) ou false (sncrono).
documento aberto pelo mtodo OPEN. Este mtodo possui somente um parmetro que serve para enviarmos dados extras ao documento que estamos acessando. Usamos este parmetro quando, por exemplo, no mtodo OPEN, acessamos o documento com POST ao invs de GET, neste caso os dados do POST so passados neste parmetro de SEND.
<!DOCTYPE HTML PUBLIC " -// W3C // DTD HTML 3.2 Final // EN "> <html> <head> < t i t l e >Exemplo 1 C a r r e g a r Arquivo do S e r v i d o r </ t i t l e > < s c r i p t type=" text / javascript " s r c=" ajaxInit . js "></s c r i p t > < s c r i p t type=" text / javascript "> function carregar () { ajax = a j a x I n i t () ; document . getElementById ( " texto " ) . innerHTML = " Carregando ... " ; i f ( ajax ) { a j a x . open ( ' GET ' , ' http ://200.201.81.38/ anselmo / ciclo / texto . txt ' , t r u e ) ; ajax . onreadystatechange = function () { i f ( a j a x . r e a d y S t a t e == 4 ) {
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
i f ( a j a x . s t a t u s == 2 0 0 ) {
} }
} </ s c r i p t > </head> <body> <d i v i d=" texto "></div> <i n p u t type=" button " v a l u e=" Carregar " o n C l i c k=" carregar () "/> </body> </html>
} a j a x . send ( n u l l ) ;
Na linha 8 ocorre a chamada para a funo ajaxInit() que esta dentro do arquivo referenciado na linha 5. A linha 9 getElementByid('texto') 1 e innerHTML2 inserem o texto Carregando dentro do DIV com o id igual a texto. Nas linhas 11, 12 e 13 so vericados o status do pedido, e do retorno e efetiva insero do contedo do arquivo texto.txt no DIV, respectivamente. Neste primeiro exemplo no houve nenhum processamento por parte de uma linguagem de programao no servidor, porm no mundo real geralmente uma chamada no modo assncrono se comunica com um script (PHP, JSP, ASP, Ruby, CGI, PERL ...), que faz um processamento sobre os dados a ele enviados e por m retorna o resultado, nosso prximo exemplo mostrar exatamente isto.
<!DOCTYPE HTML PUBLIC " -// W3C // DTD HTML 3.2 Final // EN "> <html> <head> < t i t l e >Exemplo 2 C a l c u l a d o r a </ t i t l e > < s c r i p t type=" text / javascript " s r c=" ajaxInit . js "></s c r i p t > < s c r i p t type=" text / javascript "> function calcular () { ajax = a j a x I n i t () ; document . getElementById ( " resultado " ) . innerHTML = " Calculando ... " ; i f ( ajax ) { ajax . onreadystatechange = resultado ; v1 = document . getElementById ( " v1 " ) . v a l u e ; v2 = document . getElementById ( " v2 " ) . v a l u e ; u r l = ' http ://200.201.81.38/ anselmo / ciclo / calcular . php ? v1 = '+v1+'& v2 = '+v2 ;
em Javascript para selecionar o elemento cujo id igual a texto. em Javascript para inserir uma string em um elemento de modo que esta seja interpretada como cdigo HTML.
2 Comando
1 Comando
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
function resultado () { i f ( a j a x . r e a d y S t a t e == 4 ) { i f ( a j a x . s t a t u s == 2 0 0 ) { document . getElementById ( " resultado " ) . innerHTML = a j a x . r e s p o n s e T e x t ; } } } </ s c r i p t > </head> <body> <form name=" calculadora "> <i n p u t type=" text " name=" v1 " i d=" v1 " s i z e="3" /> + <i n p u t type=" text " name=" v2 " i d=" v2 " s i z e="3 "/> = <l a b e l i d=" resultado "></l a b e l > <br/> <i n p u t type=" button " v a l u e=" Carregar " o n C l i c k=" calcular () "/> </form> </body> </html>
<? ?>
Na linha 11 o mtodo onreadystatechange assume uma funo externa a funo que cria o objeto ajax. A linha 12 e 13 cria duas variveis que armazenam os valores dos campos que esto no formulrio, este dado so pegos atravs do value 3 . A varivel url da linha 14 ir conter o endereo e as variveis que sero usadas pelo PHP para calcular a soma dos resultados. O arquivo PHP que realiza o clculo da soma realmente simples, ele pega as duas variveis v1 e v2 do array $_GET do PHP, soma seus valores e escreve o resultado. At o momento o resultado de nossas chamadas assncronas foram escritos de forma direta atravs do mtodo innerHTML, o uso deste mtodo desaconselhado pelo W3C pelas seguinte razes.
uma propriedade desenvolvida pela Microsoft, por esta razo proprietria, porm a maior parte dos navegadores incorporou-a. Por no ser padro esta sendo abolida das novas verses destes navegadores O resultado um string ao passo que o DOM uma estrutura hierrquica em XHTML
Os prximos dois exemplo so idnticos, diferenciando apena a forma como os dados so passados do servidor para o cliente, o primeiro usando texto normal e o outro uma string no formato JSON, usando ento o DOM para exibir o resultado da requisio.
3 Propiedade
<!DOCTYPE html PUBLIC " -// W3C // DTD XHTML 1.0 Transitional // EN " " http :// www . w3 . org / TR / xhtml1 / DTD / xhtml1 - transitional . dtd "> <html xmlns=" http :// www . w3 . org /1999/ xhtml " xml : l a n g="pt - br " l a n g="pt - br "> <head> < t i t l e >Exemplo 3 E s c o l h a a Cidade </ t i t l e > < s c r i p t type=" text / javascript " s r c=" ajaxInit . js "></s c r i p t > < s c r i p t type=" text / javascript "> function selecionaCidade ( estado ) { ajax = a j a x I n i t () ; i f ( ajax ) { ajax . onreadystatechange = escreveCidades ; u r l = ' http ://200.201.81.38/ anselmo / ciclo / cidades . php ? estado = '+e s t a d o ; a j a x . open ( ' GET ' , u r l , t r u e ) ; a j a x . send ( n u l l ) ; } } function escreveCidades () { i f ( a j a x . r e a d y S t a t e == 4 ) { i f ( a j a x . s t a t u s == 2 0 0 ) { document . getElementById ( " cidade " ) . innerHTML = a j a x . r e s p o n s e T e x t ; } } } </ s c r i p t > </head> <body> <form name=" selecioneCidade "> <l a b e l for=" estado " a c c e s s k e y="e"><u>E</u>s t a d o :</ l a b e l > < s e l e c t name=" estado " i d=" estado " onChange=" if ( this . options [ this . selectedIndex ]. value ) { selecionaCidade ( this . options [ this . selectedIndex ]. value )} "> <o p t i o n v a l u e=" pr ">PR</o p t i o n > <o p t i o n v a l u e=" sp ">SP</o p t i o n > </ s e l e c t ><br/> <l a b e l for=" cidade " a c c e s s k e y="c"><u>C</u>i d a d e :</ l a b e l > < s e l e c t name=" cidade " i d=" cidade "> </ s e l e c t > </form> </body>
43
</html>
<? h e a d e r ( " Content - Type : text / html ; charset = iso -8859 -1 " ) ; $ e s t a d o = $_GET[ ' estado ' ] ; $ c i d a d e s = "" ; i f ( $ e s t a d o==" pr " ) { $ c i d a d e s .= " < option value =\"1\" > Tupssi </ option >" ; $ c i d a d e s .= " < option value =\"2\" > Toledo </ option > " ; $ c i d a d e s .= " < option value =\"3\" > Cascavel </ option >" ; $ c i d a d e s .= " < option value =\"4\" > Pato Branco </ option >" ; }
i f ( $ e s t a d o==" sp " ) {
$ c i d a d e s .= " < option value =\"5\" > Mogi </ option >" ; $ c i d a d e s .= " < option value =\"6\" > Palmeiras </ option >" ; $ c i d a d e s .= " < option value =\"7\" > Santos </ option > " ;
echo $ c i d a d e s ; ?>
O arquivo Cidades.php gera os elementos options que sero inseridos dentro do SELECT das cidades. Esta abordagem no muito inteligente pois a quantidade de informao transmitidas do servidor para o cliente em sua maioria foi desnecessria. Da cidade apenas o cdigo e o nome deveriam ser transmitidos, as demais informaes so repetidas e podem ser geradas pelo navegador. Na linha 31 do cdigo fonte 5 feita a vericao se um dos elementos do SELECT estado foi selecionado, se sim ento envie o valor para a funo selecionaCidade. O cdigo fonte 6 a varivel estado recebida e de acordo com ela passado ao navegador as opes do SELECT cidade.
razo JSON tipicamente usado em ambientes onde o tamanho do uxo de dados entre o cliente e o servidor de supra importncia (da seu uso por Google, Yahoo, etc., os quais servem milhes de usurios), onde a fonte dos dados pode ser explicitamente convel, e onde a perda dos recursos de processamento XSLT no lado cliente para manipulao de dados ou gerao da interface, no uma considerao. Enquanto JSON freqentemente posicionado "em confronto"com XML, no incomum ver tanto JSON como XML sendo usados na mesma aplicao. Por exemplo, uma aplicao no lado cliente a qual integra dados do Google Maps com dados atmosfricos atravs de SOAP, requer suporte para ambos formatos de dados.
Figura 2: Automato que gera a linguagem JSON A gura 2 ilustra em forma de um autmato nito a gramtica da linguagem JSON. A string abaixo mostra um retorno das cidades do estado do Paran.
<!DOCTYPE html PUBLIC " -// W3C // DTD XHTML 1.0 Transitional // EN " " http :// www . w3 . org / TR / xhtml1 / DTD / xhtml1 - transitional . dtd "> <html xmlns=" http :// www . w3 . org /1999/ xhtml " xml : l a n g="pt - br " l a n g="pt - br "> <head> < t i t l e >Exemplo 3 E s c o l h a a Cidade </ t i t l e > < s c r i p t type=" text / javascript " s r c=" ajaxInit . js "></s c r i p t > < s c r i p t type=" text / javascript "> function selecionaCidadeJson ( estado ) { ajax = a j a x I n i t () ; i f ( ajax ) { ajax . onreadystatechange = escreveCidadesJson ; u r l = ' http ://200.201.81.38/ anselmo / ciclo / cidadesJson . php ? estado = '+e s t a d o ; a j a x . open ( ' GET ' , u r l , t r u e ) ; a j a x . send ( n u l l ) ; } } function escreveCidadesJson () { i f ( a j a x . r e a d y S t a t e == 4 ) { i f ( a j a x . s t a t u s == 2 0 0 ) { var x = 0 ; var j s o n = e v a l ( "("+a j a x . r e s p o n s e T e x t+")" ) ; l i m p a r D e s t i n o ( " cidade2 " ) ;
/
/
Remove t o d o s os e l e m e n t o s f i l h o s de um elemento
function limparDestino ( destino ) { o b j = document . getElementById ( d e s t i n o ) ; while ( o b j . f i r s t C h i l d ) o b j . removeChild ( o b j . f i r s t C h i l d ) ; } </ s c r i p t > </head> <body> <form name=" selecioneCidade "> <l a b e l for=" estado " a c c e s s k e y="e"><u>E</u>s t a d o :</ l a b e l > < s e l e c t name=" estado " i d=" estado " onChange=" if ( this . options [ this . selectedIndex ]. value ) { selecionaCidadeJson ( this . options [ this . selectedIndex ]. value )} "> <o p t i o n v a l u e=" -"></o p t i o n > <o p t i o n v a l u e=" pr ">PR</o p t i o n > <o p t i o n v a l u e=" sp ">SP</o p t i o n > </ s e l e c t ><br/>
10
64 65 66 67 68 69
<l a b e l for=" cidade " a c c e s s k e y="c"><u>C</u>i d a d e :</ l a b e l > < s e l e c t name=" cidade " i d=" cidade2 "> </ s e l e c t > </form> </body> </html>
<? h e a d e r ( " Content - Type : text / html ; charset = iso -8859 -1 " ) ; $ e s t a d o = $_GET[ ' estado ' ] ; $ c i d a d e s = "{' cidades ':[ " ; i f ( $ e s t a d o==" pr " ) { $ c i d a d e s .= "{' cdg ': '1 ' , ' nm ':' Tupssi '} , {' cdg ': '2 ' , ' nm ':' Toledo '}, {' cdg ': '3 ' , ' nm ':' Cascavel '}, {' cdg ': '4 ' , ' nm ':' Pato Branco '}]} " ; }
i f ( $ e s t a d o==" sp " ) {
$ c i d a d e s .= "{' cdg ': '5 ' , ' nm ':' Mogi '}, {' cdg ': '6 ' , ' nm ':' Palmeiras '} , {' cdg ': '7 ' , ' nm ':' Santos '}]} " ;
echo $ c i d a d e s ; ?>
Revisando o Cdigo 8 podemos ver que a linha 2 chama a funo header, nela passado o comando charset=iso88591, isto muito importante pois diz a codicao do texto que esta sendo retornado, evitando assim que o navegador do usurio exiba de forma incorreta os acentos e outros caracteres especiais. Com os exemplos acima pudemos ter uma boa noo de como utilizar o ajax em nossas aplicaes web, mas, queremos coisas mais dinmicas e com efeitos por isso vamos fazer um pequeno Google Sugest
6 Sugerindo um Contedo
Nosso prximo exemplo consistir em um campo de texto que a cada tecla pressionada ir ao servidor e trar uma lista de palavras que comecem com o que j foi escrito. Isto ser exibido em uma DIV. Quando clicarmos em uma das palavras que vieram do servidor a DIV ir sumir e o texto ir para dentro da caixa de texto. Este sistema utilizado por exemplo no servio de e-mail do Yahoo, nele, quando digita-se o nome do contato ele j vai ltrando os que comeam com as letras j digitadas. Cdigo 9: 'Auto Completar HTML'
1 2 3 4 5 6 7
<!DOCTYPE HTML PUBLIC " -// W3C // DTD HTML 3.2 Final // EN "> <html> <head> < t i t l e >Auto Completar </ t i t l e > < s c r i p t type=" text / javascript " s r c=" ajaxInit . js "></s c r i p t > < s c r i p t type=" text / javascript "> function sugerir ( s ) {
11
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
ajax = a j a x I n i t () ; document . getElementById ( " resultado " ) . innerHTML = " Calculando ... " ; i f ( ajax ) { ajax . onreadystatechange = resultado ; u r l = ' http ://200.201.81.38/ anselmo / ciclo / autoCompletar . php ?s= '+s ; a j a x . open ( ' GET ' , u r l , t r u e ) ; a j a x . send ( n u l l ) ; }
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
function resultado () { i f ( a j a x . r e a d y S t a t e == 4 ) { i f ( a j a x . s t a t u s == 2 0 0 ) { j s o n = e v a l ( "("+a j a x . r e s p o n s e T e x t+") " ) ; var x = 0 ; l i m p a r D e s t i n o ( " resultado " ) ; document . getElementById ( ' resultado ' ) . s t y l e . v i s i b i l i t y =' visible ' ; for ( x=0; x < j s o n . p a l . l e n g t h ; x++) { P = document . c r e a t e E l e m e n t ( "p" ) ; P . appendChild ( document . createTextNode ( j s o n . p a l [ x ] ) ) ; P . s e t A t t r i b u t e ( " onClick " , " document . getElementById (' pal '). value ='"+ j s o n . p a l [ x]+ " '; document . getElementById ( ' resultado '). style . visibility =' hidden '" ) ; document . getElementById ( " resultado " ) . appendChild (P) ; } } } }
/
/
Remove t o d o s os e l e m e n t o s f i l h o s de um elemento
function limparDestino ( destino ) { o b j = document . getElementById ( d e s t i n o ) ; while ( o b j . f i r s t C h i l d ) o b j . removeChild ( o b j . f i r s t C h i l d ) ; } </ s c r i p t > < s t y l e type=" text / css "> #r e s u l t a d o { background c o l o r : #e 5 e 5 e 5 ; border : 1px s o l i d #000; width : 150 px ; padding : 0px ; margin : 0px ; position : relative ; margin l e f t : 45 px ; margin top : 0px ; } p { l i n e h e i g h t : 15 px ; margin : 0px ; font : 18 px " Arial " , sans s e r i f ; padding : 5px ; } p : hover { background c o l o r : #cdcdcd ; cursor : pointer ; } </ s t y l e > </head> <body> <form name=" auto "> <l a b e l for=" pal " a c c e s s k e y=" pal ">Palavra </ l a b e l > <i n p u t type=" text " i d=" pal " name=" pal " onKeyUp=" sugerir ( document . getElementById
12
71 72 73 74
(' pal '). value )"/> <d i v i d=" resultado " s t y l e=" visibility : hidden "></div> </form> </body> </html>
<?
$p [ 0 ] $p [ 1 ] $p [ 2 ] $p [ 3 ] $p [ 4 ] $p [ 5 ] $p [ 6 ] $p [ 7 ] $p [ 8 ] $p [ 9 ] $p [ 1 0 ] $p [ 1 1 ]
= = = = = = = = = = = =
" abacate " ; " abobora " ; " banana " ; " beco " ; " cabo " ; " cebo " ; " dedo " ; " dado " ; " elefante " ; " faca " ; " gato " ; " porta " ;
?>
$ s e a r c h = $_GET[ 's ' ] ; $x = 0 ; $ r e s = "{ ' pal ':[ " ; for ( $x = 0 ; $x <11; $x++){ i f ( $ s e a r c h==s u b s t r ( $p [ $x ] , 0 , s t r l e n ( $ s e a r c h ) ) ) { $ r e s .= " '" . $p [ $x ] . " '," ; } } $ r e s = s u b s t r ( $ r e s , 0 , ( s t r l e n ( $ r e s ) 1) ) ; $ r e s .= " ]} " ; echo $ r e s ;
Vamos analisar o Cdigo 9, na linha 24 chamada a funo style 5 .visibility 6 dene que o resultado esta oculto. Na linha 28 duas funes so adicionadas ao pargrafo com o texto que veio do servidor, a primeira funo coloca a palavra dentro da caixa de texto e a segunda funo esconde o DIV resultado. Agora vamos ver o Cdigo 10 em PHP, existe um vetor chamado $p com 12 palavras, a linha 17 e 20 montam a string no formato json, a linha 23 remove a virgula da ltima palavra.
os estilos em CSS em um objeto que dene se o objeto esta visvel 'visible' ou oculto 'hidden'
13
1 2 3 4 5 6 7 8 9 10 11
# FileName=" Connection_php_mysql . htm " # Type=" MYSQL " # HTTP=" true "
<?php
$hostname_conexao = " localhost " ; $database_conexao = " test " ; $username_conexao = " aluno " ; $password_conexao = " aluno " ; $conexao = mysql_pconnect ( $hostname_conexao , $username_conexao , $password_conexao ) o r d i e ( mysql_error ( ) ) ; mysql_select_db ( $database_conexao , $conexao ) ; ?>
<?
i n c l u d e ( " conexao . php " ) ; $ s e a r c h = $_GET[ 's ' ] ; $ s q l= " SELECT * FROM municipio WHERE mnc_descricao like '" . $ s e a r c h . "% '" ; $ c o n s u l t a = mysql_query ( $ s q l , $conexao ) ; $ l i n h a s = mysql_fetch_array ( $ c o n s u l t a ) ;
do {
$ r e s .= " '" . s t r _ r e p l a c e ( " '" , " " , $ l i n h a s [ ' mnc_descricao ' ] ) . " '," ; } while ( $ l i n h a s = mysql_fetch_array ( $ c o n s u l t a ) ) ; $ r e s = s u b s t r ( $ r e s , 0 , ( s t r l e n ( $ r e s ) 1) ) ; $ r e s .= " ]} " ; echo $ r e s ;
?>
O cdigo 11 cria uma conexo com o banco de dados, a linha 9 conecta com o servidor usando o usurio e senha e a linha 10 inicia o uso do banco de dados text. O cdigo 12 faz a pesquisa dos municpios no banco de dados, na linha 2 includa o arquivo que faz a conexo, na linha 4 a varivel $search recebe a palavra que foi digitada na caixa de texto, na linha 13 o comando str_replace 7 foi utilizado para evitar problemas com palavras que por ventura contenham aspas simples como por exemplo d'agua, se este tratamento no for feito na hora de chamar a funo eval ocorreria um erro.
Torna possvel utilizar uma aplicao baseada na web com recurso e funcionalidades parecidos com os que possumos hoje em nossos sistemas Desktop. Isto torna o uso dos aplicativos web realmente usveis; Como a modicao das informaes da tela so parciais uma grande quantidade de informaes deixa de trafegar inutimente pela rede;
7 Substitui
14
O servidor que roda a aplicao ca menor carregado pois existe uma diviso de tarefas com o cliente; AJAX no uma tecnologia por isto no necessrio pagar para a utilizar.
Porm como j dizia o poeta "nem tudo so ores ", temos que:
AJAX no a soluo milagrosa para todos os males e se usado de forma inadequada pode piorar uma situao que j era feia; Os Navegadores usam diferentes mtodos por isso temos que estar atentos quanto a eles para no impossibilitar o uso de nossos sistemas por tais navegadores; Como existe uma diviso de processamente entre o cliente e o servidor, temos que minimizar este processamento pois os Navegador em geral no suporta uma carga muito pesada de scripts ; Os boto voltar, avana e histrico no funcionam muito bem com AJAX.
Referncias
[1] Erko Bridee de Almeida Cabrera. AJAX Viso Conceitual. Portal Java, 2005. [2] Steve Ganz. Alternatives to innerHTML. SlayerOce, 2006. [3] Jesse James Garrett. Ajax: A new approach to web applications, http://adaptivepath.com/publications/essays/archives/000385.php. 2005.
15
DHTML http://www.quirksmode.org/js/cross_dhtml.html Exemplos em Ajax http://www.japs.etc.br/ajax/ Material sobre Css http://www.maujor.com DOM XHTML e HTML http://www.amtechs.com/w3c/introduction.html
16