SlideShare uma empresa Scribd logo
1 de 16
Baixar para ler offline
AJAX - Tutorial
Anselmo Luiz Éden Battisti, Christiano Julio Pilger de Brito
Universidade Estadual do Oeste do Paraná
Reitoria - DRI
Cascavel - Paraná - Brasil
anselmobattisti@yahoo.com.br, chrisjulio@gmail.com
18 de agosto de 2006
1 AJAX - Sem Mistérios
eteˆ @—™rónimo em língu— ingles— de Asyncronous Javascript And XMLA é o uso sisteE
máti™o de t—v—s™ript e ˆwv @e deriv—dosA p—r— torn—r o n—veg—dor m—is inter—tivo ™om
o usuárioD utiliz—ndoEse de soli™it—ções —ssín™ron—s de inform—çõesF eteˆ não é somente
um novo modeloD é t—m˜ém um— ini™i—tiv— n— ™onstrução de —pli™—ções web m—is dinâmiE
™—s e ™ri—tiv—sF eteˆ não é um— te™nologi—D são re—lmente vári—s te™nologi—s tr—˜—lh—ndo
junt—sD ™—d— um— f—zendo su— p—rteD ofere™endo nov—s fun™ion—lid—desF eteˆ in™orpor—
em seu modeloX
• epresent—ção ˜—se—d— em p—drõesD us—ndo ˆr„wv e gƒƒY
• ixposição e inter—ção dinâmi™— us—ndo o hywY
• snter™âm˜io e m—nipul—ção de d—dos us—ndo ˆwv e ˆƒv„Y
• ‚e™uper—ção —ssín™ron— de d—dos us—ndo o o˜jeto ˆwvrttp‚equestY
• Javascript unindo tod—s el—s em ™onjuntoF
y modelo ™lássi™o de —pli™—ção web tr—˜—lh— —ssimX e m—iori— d—s —ções do usuário
n— interf—™e disp—r— um— soli™it—ção r„„€ p—r— o servidor webF y servidor pro™ess— —lgo
re™uper—ndo d—dosD m—stig—ndo númerosD ™onvers—ndo ™om vários sistem—s leg—dos e
então retorn— um— págin— r„wv p—r— o ™lienteF É um modelo —d—pt—do do uso origin—l
d— web ™omo um —gente de hipertextoD porém o que f—z — web ˜o— p—r— hipertexto não
ne™ess—ri—mente f—z el— ˜o— p—r— —pli™—ções de softw—reF
ist— —proxim—ção possui muito dos sentidos té™ni™osD m—s não f—z tudo que um usuário
experiente poderi— f—zerF inqu—nto o servidor está f—zendo seu tr—˜—lhoD o que o usuário
est—rá f—zendoc y que é ™ertoD esper—ndoF i — ™—d— et—p— em um— t—ref—D o usuário
—gu—rd— m—is um— vezF
I
y˜vi—menteD se nós estivéssemos projet—ndo — web do n—d— p—r— —pli™—çõesD não f—E
rí—mos ™om que os usuários esper—ssem em vãoF …m— vez que — interf—™e está ™—rreg—d—D
por que — inter—ção do usuário deveri— p—r—r — ™—d— vez que — —pli™—ção pre™is—sse de —lgo
do servidorc x— re—lid—deD por que o usuário deveri— ver — —pli™—ção ir —o servidor tod—
vezc
e m—ior v—nt—gem d—s —pli™—ções eteˆ é que el—s rod—m no próprio n—veg—dor webF
intãoD p—r— est—r há˜il — exe™ut—r —pli™—ções eteˆD ˜—st—r possuir —lgum dos n—veg—dores
modernosD ou sej—D l—nç—dos —pós PHHIF ƒão elesX wozill— pirefoxD snternet ixplorer SCD
yper—D uonqueror e ƒ—f—riF
pigur— IX hi—gr—m— de requisições —o servidor
2 A Classe Assíncrona
€—r— se f—zer um pedido r„„€ —o servidor us—ndo t—v—s™riptD vo™ê pre™is— de um o˜jeto
que disponi˜iliz— ess— fun™ion—lid—deF „—l ™l—sse foi primeiro introduzid— no snternet ixE
plorer so˜ — form— de um o˜jeto e™tiveˆ ™h—m—do ˆwvr„„€F intão o wozill—D o ƒ—f—ri
e outros ˜rowsers seguir—mEseD implement—ndo um— ™l—sse de nome ˆwvrttp‚equest que
suport—v— os métodos e —s propried—des do o˜jeto e™tiveˆ origin—l d— wi™rosoftF
y ™ódigo —˜—ixo mostr— — form— genéri™— de inst—n™i—r um o˜jeto que proverá os
me™—nismos p—r— pedidos —ssín™ronosF
gódigo IX 9—j—xsnitFjs9
f u n c t i o n a j a x I n i t ( ) {
v a r x m l h t t p ;
5 t r y {
x m l h t t p = new XMLHttpRequest ( ) ;
} c a t c h ( e e ) {
t r y {
x m l h t t p = new A c t i v e X O b j e c t ( "Msxml2.XMLHTTP" ) ;
10 } c a t c h ( e ) {
t r y {
x m l h t t p = new A c t i v e X O b j e c t ( "Microsoft.XMLHTTP" ) ;
} c a t c h (E) {
x m l h t t p = f a l s e ;
15 }
}
}
return x m l h t t p ;
20 }
ys métodos e —tri˜utos p—drões estão des™ritos —˜—ixoF
2.1 Atributos
ƒegue —˜—ixo —lguns dos —tri˜utos do o˜jeto de ™onexão —ssín™ron—F
P
readyState X ™ódigo que diz o st—tus d— soli™it—ção —ssín™ron—D ele v—ri— de H —té S
• H @uniniti—lizedAY
• I @— ™—rreg—rAY
• P @™—rreg—doAY
• Q @inter—tivoAY
• R @™ompletoAF
status X ƒt—tus do retorno do r„wvD são os ™ódigos p—drões do r„wv PHH okD RHH
no found
responseText X retorn— — ™—dei— de ™—r—™teres que o servidor enviouF
responseXml X retorn— o ˆwv o servidor enviouF
onreadystatechange X de(ne qu—l função será ™h—m—d— p—r— f—zer — m—nipul—ção
dos d—dos —ssim que houver um retornoF
http•requestFonre—dyst—te™h—nge a n—meyf„hepun™tionY
†—mos — ver o que é que est— função deve f—zerF €rimeiroD — função pre™is— de veri(™—r
o est—do do pedidoF ƒe o est—do possui o v—lor RD isso signi(™— que — tot—lid—de d— respost—
do servidor foi re™e˜id— e que pode ™ontinu—r — pro™essáEl— à vont—deF
e próxim— ™ois— — veri(™—r é o ™ódigo do est—do d— respost— r„„€ do servidorF €—r—
os nossos o˜jetivos só est—mos interess—dos n— respost— PHH yuF
if (http_request.readyState == 4) {
if (http_request.status == 200) {
// deu certo
} else {}
}
2.2 Métodos
ƒegue —˜—ixo —lguns dos métodos do o˜jeto de ™onexão —ssín™ron—F
open(mode, url, boolean)
• modeX „ipo d— requisiçãoD qi„ ou €yƒ„
• urlX …rl do o˜jeto soli™it—do no modo —ssín™ronoD pro questões de segur—nç— o pirefox
não permite que — …‚v estej— em um servidor diferente d— págin— que est— f—zendo
— soli™it—çãoF
• ˜oole—nX true @—ssín™ronoA ou false @sín™ronoAF
send() É o método ƒixh que —tiv— — ™onexão e f—z — requisição de inform—ções —o
do™umento —˜erto pelo método y€ixF iste método possui somente um p—râmetro que
serve p—r— envi—rmos d—dos extr—s —o do™umento que est—mos —™ess—ndoF …s—mos este
p—râmetro qu—ndoD por exemploD no método y€ixD —™ess—mos o do™umento ™om €yƒ„
—o invés de qi„D neste ™—so os d—dos do €yƒ„ são p—ss—dos neste p—râmetro de ƒixhF
Q
3 Exemplo 1 Solicitando um arquivo de texto
xo exemplo I iremos tr—˜—lh—r ™om os elementos ˜ási™os vistos —té —gor—
gódigo PX 9ixemplo I9
<!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 A r q u i v o do S e r v i d o r </ t i t l e >
5 < s c r i p t t y p e="text/javascript" s r c="ajaxInit.js"></ s c r i p t >
< s c r i p t t y p e="text/javascript">
f u n c t i o n c a r r e g a r ( ) {
a j a x = a j a x I n i t ( ) ;
document . g e t E l e m e n t B y I d ( "texto" ) . innerHTML = "Carregando ..." ;
10 if ( a j a x ) {
a j a x . open ( 'GET' , 'http ://200.201.81.38/ anselmo/ciclo/texto.txt' , t r u e ) ;
a j a x . o n r e a d y s t a t e c h a n g e = f u n c t i o n ( ) {
if ( a j a x . r e a d y S t a t e == 4 ) {
if( a j a x . s t a t u s == 2 0 0 ) {
15 document . g e t E l e m e n t B y I d ( "texto" ) . innerHTML = a j a x . r e s p o n s e T e x t ;
}
}
}
}
20 a j a x . s e n d ( n u l l ) ;
}
</ s c r i p t >
</head>
<body>
25 <d i v i d="texto"></d i v >
<i n p u t t y p e="button" v a l u e="Carregar" o n C l i c k=" carregar () "/>
</body>
</html>
x— linh— V o™orre — ™h—m—d— p—r— — função ajaxInit() que est— dentro do —rquivo
referen™i—do n— linh— SF e linh— W getElementByid('texto') 1
e innerHTML2
inserem o
texto g—rreg—ndo dentro do hs† ™om o id igu—l — textoF
x—s linh—s IID IP e IQ são veri(™—dos o status do pedidoD status do retorno e efetiv—
inserção do ™onteúdo do —rquivo textoFtxt no hs†D respe™tiv—menteF
xeste primeiro exemplo não houve nenhum pro™ess—mento por p—rte de um— lingu—gem
de progr—m—ção no servidorD porém no mundo re—l ger—lmente um— ™h—m—d— no modo
—ssín™rono se ™omuni™— ™om um script @€r€D tƒ€D eƒ€D ‚u˜yD gqsD €i‚v FFFAD que f—z
um pro™ess—mento so˜re os d—dos — ele envi—dos e por (m retorn— o result—doD nosso
próximo exemplo mostr—rá ex—t—mente istoF
4 Exemplo 2 Criando uma calculadora
im nosso segundo exemplo iremos introduzir o uso de um— lingu—gem server-side re—E
liz—ndo um pro™ess—mento so˜re os d—dos envi—dos no modo —ssín™ronoD isto será feito
™ri—ndo um— ™—l™ul—dor—F
1Comando em Javascript para selecionar o elemento cujo id é igual a texto.
2Comando em Javascript para inserir uma string em um elemento de modo que esta seja interpretada
como código HTML.
R
xoss— ™—l™ul—dor— será ™ompost— de P ™—ix—s de texto p—r— — entr—d— dos v—lores e
um— l—˜el p—r— exi˜ição dos result—dosD — úni™— oper—ção que el— re—liz— é — som—F
gódigo QX 9g—l™ul—dor— r„wv9
<!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 >
5 < s c r i p t t y p e="text/javascript" s r c="ajaxInit.js"></ s c r i p t >
< s c r i p t t y p e="text/javascript">
f u n c t i o n c a l c u l a r ( ) {
a j a x = a j a x I n i t ( ) ;
document . g e t E l e m e n t B y I d ( "resultado" ) . innerHTML = "Calculando ..." ;
10 if ( a j a x ) {
a j a x . o n r e a d y s t a t e c h a n g e = r e s u l t a d o ;
v1 = document . g e t E l e m e n t B y I d ( "v1" ) . v a l u e ;
v2 = document . g e t E l e m e n t B y I d ( "v2" ) . v a l u e ;
u r l = 'http ://200.201.81.38/ anselmo/ciclo/calcular.php?v1='+v1+'&v2='+v2 ;
15 a j a x . open ( 'GET' , u r l , t r u e ) ;
a j a x . s e n d ( n u l l ) ;
}
}
20 f u n c t i o n r e s u l t a d o ( ) {
if ( a j a x . r e a d y S t a t e == 4 ) {
if( a j a x . s t a t u s == 2 0 0 ) {
document . g e t E l e m e n t B y I d ( "resultado" ) . innerHTML = a j a x . r e s p o n s e T e x t ;
}
25 }
}
</ s c r i p t >
</head>
<body>
30 <form name="calculadora">
<i n p u t t y p e="text" name="v1" i d="v1" s i z e="3"/> + <i n p u t t y p e="text" name="v2"
i d="v2" s i z e="3"/> =
< l a b e l i d="resultado"></ l a b e l > <b r/>
<i n p u t t y p e="button" v a l u e="Carregar" o n C l i c k="calcular ()"/>
</form>
35 </body>
</html>
gódigo RX 9g—l™ul—dor— €r€9
<?
e c h o $_GET [ 'v1' ] + $_GET [ 'v2' ] ;
?>
x— linh— II o método onreadystatechange —ssume um— função extern— — função que
™ri— o o˜jeto —j—xF
e linh— IP e IQ ™ri— du—s v—riáveis que —rm—zen—m os v—lores dos ™—mpos que estão
no formulárioD este d—do são pegos —tr—vés do value 3
F
e v—riável url d— linh— IR irá ™onter o endereço e —s v—riáveis que serão us—d—s pelo
€r€ p—r— ™—l™ul—r — som— dos result—dosF
y —rquivo €r€ que re—liz— o ™ál™ulo d— som— é re—lmente simplesD ele peg— —s du—s
v—riáveis v1 e v2 do array $_GET do €r€D som— seus v—lores e es™reve o result—doF
3Propiedade de alguns objetos em Javascript que retorna o conteúdo do mesmo
S
eté o momento o result—do de noss—s ™h—m—d—s —ssín™ron—s er—m es™ritos de form—
diret— —tr—vés do método innerHTMLD o uso deste método é des—™onselh—do pelo ‡Qg
pel—s seguinte r—zõesF
• É um— propried—de desenvolvid— pel— MicrosoftD por est— r—zão proprietári—D porém
— m—ior p—rte dos n—veg—dores in™orporouE—F
• €or não ser p—drão est— sendo —˜olid— d—s nov—s versões destes n—veg—dores
• y result—do é um string —o p—sso que o hyw é um— estrutur— hierárqui™— em
ˆr„wv
ys próximos dois exemplo são idênti™osD diferen™i—ndo —pen— — form— ™omo os d—dos
são p—ss—dos do servidor p—r— o ™lienteD o primeiro us—ndo texto norm—l e o outro será
us—do um— string no form—to JSON e hyw p—r— exi˜ir o result—do de um— requisiçãoF
5 Exemplo 3 Preenchimento um SELECT a partir de
outro SELECT
…m exemplo ™lássi™o do preen™himento de um SELECT — p—rtir de outro é — es™olh— d—s
™id—des de um determin—do est—doF iste re™urso é um— d—s m—iores 9pedr—s no s—p—to9
dos progr—m—dores de sistem— webD pois qu—ndo o usuário sele™ion— o est—do tod— — págin—
deve ser re™—rreg—d—D in™lusive os v—lores dos dem—is ™—mpos já preen™hidosD p—r— que o
SELECT ™om —s ™id—des sej— exi˜idoF
gom eteˆ est— t—ref— (™— ˜em m—is fá™il pois ˜—st— que sej— feit— um— ™onsult— d—s
™id—des do est—do que est— no primeiro SELECT e inserir —s ™id—des no segundo SELECTF
5.1 Usando InnerHTML
gódigo SX 9gid—des r„wv9
<!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">
5 <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 t y p e="text/javascript" s r c="ajaxInit.js"></ s c r i p t >
< s c r i p t t y p e="text/javascript">
f u n c t i o n s e l e c i o n a C i d a d e ( e s t a d o ) {
10 a j a x = a j a x I n i t ( ) ;
if ( a j a x ) {
a j a x . o n r e a d y s t a t e c h a n g e = e s c r e v e C i d a d e s ;
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 ) ;
15 a j a x . s e n d ( n u l l ) ;
}
}
f u n c t i o n e s c r e v e C i d a d e s ( ) {
T
20 if ( a j a x . r e a d y S t a t e == 4 ) {
if( a j a x . s t a t u s == 2 0 0 ) {
document . g e t E l e m e n t B y I d ( "cidade" ) . innerHTML = a j a x . r e s p o n s e T e x t ;
}
}
25 }
f u n c t i o n s e l e c i o n a C i d a d e J s o n ( e s t a d o ) {
a j a x = a j a x I n i t ( ) ;
if ( a j a x ) {
30 a j a x . o n r e a d y s t a t e c h a n g e = e s c r e v e C i d a d e s J s o n ;
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 . s e n d ( n u l l ) ;
}
35 }
f u n c t i o n e s c r e v e C i d a d e s J s o n ( ) {
if ( a j a x . r e a d y S t a t e == 4 ) {
if( a j a x . s t a t u s == 2 0 0 ) {
40 v a r x = 0 ;
v a r 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" ) ;
45 for( x =0; x<=j s o n . c i d a d e s . l e n g t h ; x++){
o p t i o n = document . c r e a t e E l e m e n t ( "option" ) ;
o p t i o n . s e t A t t r i b u t e ( "value" , j s o n . c i d a d e s [ x ] . cdg ) ;
50
o p t i o n . a p p e n d C h i l d ( document . c r e a t e T e x t N o d e ( j s o n . c i d a d e s [ x ] . nm) ) ;
document . g e t E l e m e n t B y I d ( document . c r e a t e T e x t N o d e ( j s o n . c i d a d e s [ x ] . nm) ) ;
55 document . g e t E l e m e n t B y I d ( "cidade2" ) . a p p e n d C h i l d ( o p t i o n ) ;
}
}
}
}
60
/∗
Remove todos os elementos f i l h o s de um elemento
∗/
f u n c t i o n l i m p a r D e s t i n o ( d e s t i n o ) {
65 o b j = document . g e t E l e m e n t B y I d ( d e s t i n o ) ;
while( o b j . f i r s t C h i l d )
o b j . r e m o v e C h i l d ( o b j . f i r s t C h i l d ) ;
}
70 </ 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 >
75 < 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="-">−−−</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 ><b r/>
80
< 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 >
U
85 <hr>
< 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 >
90 <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 ><b r/>
< 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">
95 <i n p u t t y p e="button" o n C l i c k="alert(eval('fred =999; wilma =777; document.write(
fred + wilma);'))"/>
</ s e l e c t >
</form>
</body>
</html>
gódigo TX 9gid—des €r€9
<?
h e a d e r ( "Content -Type: text/html; charset=iso -8859 -1" ) ;
$ e s t a d o = $_GET [ 'estado ' ] ;
5 $ c i d a d e s = "" ;
if ( $ e s t a d o=="pr" ) {
$ c i d a d e s .= "<option value ="1" > Tupãssi </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 >" ;
10 $ c i d a d e s .= "<option value ="4" > Pato Branco </option >" ;
}
if ( $ e s t a d o=="sp" ) {
$ c i d a d e s .= "<option value ="5" >Mogi </option >" ;
15 $ c i d a d e s .= "<option value ="6" > Palmeiras </option >" ;
$ c i d a d e s .= "<option value ="7" > Santos </option >" ;
}
e c h o $ c i d a d e s ;
20 ?>
y —rquivo gid—desFphp ger— os elementos options que serão inseridos dentro do SE-
LECT d—s ™id—desF ist— —˜ord—gem não é muito inteligente pois — qu—ntid—de de inforE
m—ção tr—nsmitid—s do servidor p—r— o ™liente em su— m—iori— foi desne™essári—F h— ™id—de
—pen—s o ™ódigo e o nome deveri—m ser tr—nsmitidosD —s dem—is inform—ções são repetid—s
e podem ser ger—d—s pelo n—veg—dorF
x— linh— QI do ™ódigo fonte S é feit— — veri(™—ção se um dos elementos do SELECT
est—do foi sele™ion—doD se sim então envie o v—lor p—r— — função selecionaCidadeF
y ™ódigo fonte T — v—riável est—do é re™e˜id— e de —™ordo ™om el— é p—ss—do —o n—veE
g—dor —s opções do SELECT ™id—deF
5.2 Usando JSON
tƒyx @™om — mesm— pronun™i— do nome 4t—son4em inglêsAD um —™rônimo p—r— Javascript
Object NotationD é um form—to leve p—r— inter™âm˜io de d—dos ™omput—™ion—isF tƒyx é
V
um su˜™onjunto d— not—ção de o˜jeto de t—v—s™riptD m—s seu uso não requer t—v—s™ript
ex™lusiv—menteF
e simpli™id—de de tƒyx tem result—do em seu uso difundidoD espe™i—lmente ™omo um—
—ltern—tiv— p—r— ˆwv em eteˆF …m— d—s v—nt—gens reivindi™—d—s de tƒyx so˜re ˆwv
™omo um form—to p—r— inter™âm˜io de d—dos neste ™ontextoD é o f—to de ser muito m—is
fá™il es™rever um —n—lis—dor tƒyxF im t—v—s™ript mesmoD tƒyx pode ser —n—lis—do triviE
—lmente us—ndo — função ev—l@AF ssto foi import—nte p—r— — —™eit—ção de tƒyx dentro d—
™omunid—de eteˆ devido — presenç— deste re™urso de t—v—s™ript em todos os n—veg—dores
web —tu—isF
x— práti™—D os —rgumentos — respeito d— f—™ilid—de de desenvolvimento e perform—n™e
do —n—lis—dor são r—r—mente relev—dos devido —os interesses de segur—nç— no uso de ev—l@A
e — ™res™ente integr—ção de pro™ess—mento ˆwv nos n—veg—dores web modernosF €or est—
r—zão tƒyx é tipi™—mente us—do em —m˜ientes onde o t—m—nho do )uxo de d—dos entre o
™liente e o servidor é de supr— importân™i— @d—í seu uso por qoogleD ‰—hooD et™FD os qu—is
servem milhões de usuáriosAD onde — fonte dos d—dos pode ser expli™it—mente ™on(ávelD e
onde — perd— dos re™ursos de pro™ess—mento ˆƒv„ no l—do ™liente p—r— m—nipul—ção de
d—dos ou ger—ção d— interf—™eD não é um— ™onsider—çãoF
inqu—nto tƒyx é freqüentemente posi™ion—do 4em ™onfronto4™om ˆwvD não é in™oE
mum ver t—nto tƒyx ™omo ˆwv sendo us—dos n— mesm— —pli™—çãoF €or exemploD um—
—pli™—ção no l—do ™liente — qu—l integr— d—dos do qoogle w—ps ™om d—dos —tmosféri™os
—tr—vés de ƒye€D requer suporte p—r— —m˜os form—tos de d—dosF
pigur— PX eutom—to que ger— — lingu—gem tƒyx
e (gur— P ilustr— em form— de um —utôm—to (nito — gr—máti™— d— lingu—gem JSONF
e string —˜—ixo mostr— um retorno d—s ™id—des do est—do do €—r—náF
{
'cidades':[
{'cdg':'1','nm':'Tupãssi'},
{'cdg':'2','nm':'Toledo'},
{'cdg':'3','nm':'Cascavel'},
{'cdg':'4','nm':'Pato Branco'}
]
}
…s—ndo — função eval4
do Javascript podemos tr—nsform—r est— string em um— estruE
tur— de o˜jetos f—™ilmente m—nipuláveisF
ƒe us—rmos — função eval no retorno d—s ™id—des poderi—mos por exemplo —™ess—r o
™ódigo d— ™id—de de €—to fr—n™o —tr—vés do seguinte ™om—ndoX
4Introduzida na especicação 1.0 do Javascript esta função interpreta uma string como uma expressão,
eval(fred=999; wilma=777; document.write(fred + wilma);) retorna 1776
W
json = eval((+ajax.responseText+));
json.cidades[3].cdg;
x— primeir— linh— é —pli™—d— — função eval e seu result—do é —rm—zen—do n— v—riável
jsonD n— linh— P é —™ess—do o —tri˜uto ™id—desD que é um vetorD n— posição Q no —tri˜uto
™dgF
€—r— um exemplo ™ompleto vej— os ™ódigos —˜—ixoF
gódigo UX 9gid—des r„wv9
!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
5 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 t y p e=text/javascript s r c=ajaxInit.js/ s c r i p t 
 s c r i p t t y p e=text/javascript
10 f u n c t i o n s e l e c i o n a C i d a d e J s o n ( e s t a d o ) {
a j a x = a j a x I n i t ( ) ;
if ( a j a x ) {
a j a x . o n r e a d y s t a t e c h a n g e = e s c r e v e C i d a d e s J s o n ;
u r l = 'http ://200.201.81.38/ anselmo/ciclo/cidadesJson.php?estado='+e s t a d o ;
15 a j a x . open ( 'GET' , u r l , t r u e ) ;
a j a x . s e n d ( n u l l ) ;
}
}
20 f u n c t i o n e s c r e v e C i d a d e s J s o n ( ) {
if ( a j a x . r e a d y S t a t e == 4 ) {
if( a j a x . s t a t u s == 2 0 0 ) {
v a r x = 0 ;
v a r j s o n = e v a l ( (+a j a x . r e s p o n s e T e x t+) ) ;
25
l i m p a r D e s t i n o ( cidade2 ) ;
for( x =0; x=j s o n . c i d a d e s . l e n g t h ; x++){
30 o p t i o n = document . c r e a t e E l e m e n t ( option ) ;
o p t i o n . s e t A t t r i b u t e ( value , j s o n . c i d a d e s [ x ] . cdg ) ;
o p t i o n . a p p e n d C h i l d ( document . c r e a t e T e x t N o d e ( j s o n . c i d a d e s [ x ] . nm) ) ;
35
document . g e t E l e m e n t B y I d ( document . c r e a t e T e x t N o d e ( j s o n . c i d a d e s [ x ] . nm) ) ;
document . g e t E l e m e n t B y I d ( cidade2 ) . a p p e n d C h i l d ( o p t i o n ) ;
}
40 }
}
}
/∗
45 Remove todos os elementos f i l h o s de um elemento
∗/
f u n c t i o n l i m p a r D e s t i n o ( d e s t i n o ) {
o b j = document . g e t E l e m e n t B y I d ( d e s t i n o ) ;
while( o b j . f i r s t C h i l d )
50 o b j . r e m o v e C h i l d ( o b j . f i r s t C h i l d ) ;
}
/ s c r i p t 
IH
/head
55 body
form name=selecioneCidade
 l a b e l for=estado a c c e s s k e y=euE/us 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 
60 o p t i o n v a l u e=prPR/o p t i o n 
o p t i o n v a l u e=spSP/o p t i o n 
/ s e l e c t b r/
 l a b e l for=cidade a c c e s s k e y=cuC/ui d a d e : / l a b e l 
65  s e l e c t name=cidade i d=cidade2
/ s e l e c t 
/form
/body
/html
gódigo VX 9gid—des €r€9
?
h e a d e r ( Content -Type: text/html; charset=iso -8859 -1 ) ;
$ e s t a d o = $_GET [ 'estado ' ] ;
5 $ c i d a d e s = {'cidades ':[ ;
if ( $ e s t a d o==pr ) {
$ c i d a d e s .= {'cdg ':'1','nm ':'Tupãssi '},
{'cdg ':'2','nm ':'Toledo '},
{'cdg ':'3','nm ':'Cascavel '},
10 {'cdg ':'4','nm ':'Pato Branco '}]} ;
}
if ( $ e s t a d o==sp ) {
$ c i d a d e s .= {'cdg ':'5','nm ':'Mogi '},
15 {'cdg ':'6','nm ':'Palmeiras '},
{'cdg ':'7','nm ':'Santos '}]} ;
}
e c h o $ c i d a d e s ;
20 ?
‚evis—ndo o gódigo V podemos ver que — linh— P ™h—m— — função headerD nel— é p—ss—do
o ™om—ndo charset=iso88591D isto é muito import—nte pois diz — ™odi(™—ção do texto que
est— sendo retorn—doD evit—ndo —ssim que o n—veg—dor do usuário exi˜— de form— in™orret—
os —™entos e outros ™—r—™teres espe™i—isF
gom os exemplos —™im— pudemos ter um— ˜o— noção de ™omo utiliz—r o —j—x em noss—s
—pli™—ções webD m—sD queremos ™ois—s m—is dinâmi™—s e ™om efeitos por isso v—mos f—zer
um pequeno Google Sugest
6 Sugerindo um Conteúdo
xosso próximo exemplo ™onsistirá em um ™—mpo de texto que — ™—d— te™l— pression—d— irá
—o servidor e tr—rá um— list— de p—l—vr—s que ™ome™em ™om o que já foi es™ritoF ssto será
exi˜ido em um— hs†F u—ndo ™li™—rmos em um— d—s p—l—vr—s que vier—m do servidor —
hs† irá sumir e o texto irá p—r— dentro d— ™—ix— de textoF
II
iste sistem— é utiliz—do por exemplo no serviço de eEm—il do YahooD neleD qu—ndo
digit—Ese o nome do ™ont—to ele já v—i (ltr—ndo os que ™omeç—m ™om —s letr—s já digit—d—sF
gódigo WX 9euto gomplet—r r„wv9
!DOCTYPE HTML PUBLIC  -//W3C//DTD HTML 3.2 Final//EN
html
head
 t i t l e Auto Completar / t i t l e 
5  s c r i p t t y p e=text/javascript s r c=ajaxInit.js/ s c r i p t 
 s c r i p t t y p e=text/javascript
f u n c t i o n s u g e r i r ( s ) {
a j a x = a j a x I n i t ( ) ;
document . g e t E l e m e n t B y I d ( resultado ) . innerHTML = Calculando ... ;
10 if ( a j a x ) {
a j a x . o n r e a d y s t a t e c h a n g e = r e s u l t a d o ;
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 . s e n d ( n u l l ) ;
15 }
}
f u n c t i o n r e s u l t a d o ( ) {
if ( a j a x . r e a d y S t a t e == 4 ) {
20 if( 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+) ) ;
v a r x = 0 ;
l i m p a r D e s t i n o ( resultado ) ;
document . g e t E l e m e n t B y I d ( 'resultado ') . s t y l e . v i s i b i l i t y ='visible ' ;
25 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 . a p p e n d C h i l d ( document . c r e a t e T e x t N o d e ( 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 . g e t E l e m e n t B y I d ( resultado ) . a p p e n d C h i l d (P) ;
30 }
}
}
}
35 /∗
Remove todos os elementos f i l h o s de um elemento
∗/
f u n c t i o n l i m p a r D e s t i n o ( d e s t i n o ) {
o b j = document . g e t E l e m e n t B y I d ( d e s t i n o ) ;
40 while( o b j . f i r s t C h i l d )
o b j . r e m o v e C h i l d ( o b j . f i r s t C h i l d ) ;
}
/ s c r i p t 
 s t y l e t y p e=text/css
45 #r e s u l t a d o {
background−c o l o r : #e 5 e 5 e 5 ;
b o r d e r : 1 px s o l i d #000;
w id th : 150 px ;
p a d d i n g : 0 px ;
50 margin : 0 px ;
p o s i t i o n : r e l a t i v e ;
margin−l e f t : 45 px ;
margin−t o p : 0 px ;
}
55 p {
l i n e −h e i g h t : 15 px ;
margin : 0 px ;
f o n t : 18 px Arial , s a n s −s e r i f ;
IP
p a d d i n g : 5 px ;
60 }
p : h o v e r {
background−c o l o r : #c d c d c d ;
c u r s o r : p o i n t e r ;
}
65 / 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=palP a l a v r a / l a b e l 
70 i n p u t t y p e=text i d=pal name=pal onKeyUp=sugerir(document.getElementById
('pal ').value)/
d i v i d=resultado s t y l e=visibility : hidden/d i v 
/form
/body
/html
gódigo IHX 9euto gomplet—r €r€9
?
$p [ 0 ] = abacate ;
$p [ 1 ] = abobora ;
$p [ 2 ] = banana ;
5 $p [ 3 ] = beco ;
$p [ 4 ] = cabo ;
$p [ 5 ] = cebo ;
$p [ 6 ] = dedo ;
$p [ 7 ] = dado ;
10 $p [ 8 ] = elefante ;
$p [ 9 ] = faca ;
$p [ 1 0 ] = gato ;
$p [ 1 1 ] = porta ;
15 $ s e a r c h = $_GET [ 's' ] ;
$x = 0 ;
$ r e s = {'pal ':[ ;
for ( $x = 0 ; $x 11; $x++){
if( $ 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 ) ) ) {
20 $ 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 .= ]} ;
25 e c h o $ r e s ;
?
†—mos —n—lis—r o gódigo WD n— linh— PR é ™h—m—d— — função style5
Fvisibility6
de(ne
que o result—do est— o™ultoF
x— linh— PV du—s funções são —di™ion—d—s —o p—rágr—fo ™om o texto que veio do servidorD
— primeir— função ™olo™— — p—l—vr— dentro d— ™—ix— de texto e — segund— função es™onde
o hs† result—doF
egor— v—mos ver o gódigo IH em €r€D existe um vetor ™h—m—do 6p ™om IP p—l—vr—sD
— linh— IU e PH mont—m — string no form—to jsonD — linh— PQ remove — virgul— d— últim—
p—l—vr—F
5Acessa os estilos em CSS em um objeto
6Atributo que dene se o objeto esta visível 'visible' ou oculto 'hidden'
IQ
6.1 Ligando a um Banco de Dados
e integr—ção de eteˆ ™om ˜—n™os de d—dos não difere em n—d— do que foi feito —té —gor—D
pois —o (m do uso do ˜—n™o de d—dos pelo ™liente o servidor envi— um— string de volt—F
xosso exemplo us—rá o mesmo —rquivo r„wv do ™ódigo —nteriorD —pen—s modi(™—reE
mos o —rquivo Fphp que será ™h—m—do por eleF
gódigo IIX 9gonexão ™om o f—n™o9
?php
# FileName=Connection_php_mysql.htm
# Type=MYSQL
# HTTP=true
5 $hostname_conexao = localhost ;
$ d a t a b a s e _ c o n e x a o = test ;
$username_conexao = aluno ;
$password_conexao = aluno ;
$ c o n e x a o = mysql_pconnect ( $hostname_conexao , $username_conexao , $password_conexao ) o r d i e
( m y s q l _ e r r o r ( ) ) ;
10 m y s q l _ s e l e c t _ d b ( $ d a t a b a s e _ c o n e x a o , $ c o n e x a o ) ;
?
gódigo IPX 9euto gomplet—r …s—ndo f—n™o de h—dos9
?
i n c l u d e ( conexao.php ) ;
$ s e a r c h = $_GET [ 's' ] ;
5
$ 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 , $ c o n e x a o ) ;
$ l i n h a s = m y s q l _ f e t c h _ a r r a y ( $ c o n s u l t a ) ;
10
$ r e s = {'pal ':[ ;
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 = m y s q l _ f e t c h _ a r r a y ( $ c o n s u l t a ) ) ;
15
$ 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 .= ]} ;
e c h o $ r e s ;
?
y ™ódigo II ™ri— um— ™onexão ™om o ˜—n™o de d—dosD — linh— W ™one™t— ™om o servidor
us—ndo o usuário e senh— e — linh— IH ini™i— o uso do ˜—n™o de d—dos –textF
y ™ódigo IP f—z — pesquis— dos muni™ípios no ˜—n™o de d—dosD n— linh— P é in™luíd— o
—rquivo que f—z — ™onexãoD n— linh— R — v—riável 6se—r™h re™e˜e — p—l—vr— que foi digit—d—
n— ™—ix— de textoD n— linh— IQ o ™om—ndo str_replace7
foi utiliz—do p—r— evit—r pro˜lem—s
™om p—l—vr—s que por ventur— ™ontenh—m —sp—s simples ™omo por exemplo ¤d9—gu—¤D se este
tr—t—mento não for feito n— hor— de ™h—m—r — função eval o™orreri— um erroF
7 Vantagens no uso do Ajax
elguns ˜enefí™ios que temos —o us—r eteˆ sãoX
7Substitui todas as ocorrências da string procurada na string de retorno
IR
• „orn— possível utiliz—r um— —pli™—ção ˜—se—d— n— web ™om re™urso e fun™ion—lid—des
p—re™idos ™om os que possuímos hoje em nossos sistem—s DesktopF ssto torn— o uso
dos —pli™—tivos web re—lmente usáveisY
• gomo — modi(™—ção d—s inform—ções d— tel— são p—r™i—is um— gr—nde qu—ntid—de
de inform—ções deix— de tr—feg—r inutimente pel— redeY
• y servidor que rod— — —pli™—ção (™— menor ™—rreg—do pois existe um— divisão de
t—ref—s ™om o ™lienteY
• eteˆ não é um— te™nologi— por isto não é ne™essário p—g—r p—r— — utiliz—rF
€orém ™omo já dizi— o poet— 4nem tudo são )ores 4D temos queX
• eteˆ não é — solução mil—gros— p—r— todos os m—les e se us—do de form— in—dequ—d—
pode pior—r um— situ—ção que já er— fei—Y
• ys x—veg—dores us—m diferentes métodos por isso temos que est—r —tentos qu—nto —
eles p—r— não impossi˜ilit—r o uso de nossos sistem—s por t—is n—veg—doresY
• gomo existe um— divisão de pro™ess—mente entre o ™liente e o servidorD temos que
minimiz—r este pro™ess—mento pois os x—veg—dor em ger—l não suport— um— ™—rg—
muito pes—d— de scriptsY
• ys ˜otão volt—rD —v—nç— e históri™o não fun™ion—m muito ˜em ™om eteˆF
Referências
‘I“ irko fridee de elmeid— g—˜rer—F AJAX Visão ConceitualF €ort—l t—v—D PHHSF
‘P“ ƒteve q—nzF Alternatives to innerHTMLF ƒl—yery0™eD PHHTF
‘Q“ tesse t—mes q—rrettF ej—xX e new —ppro—™h to we˜ —ppli™—tionsD
httpXGG—d—ptivep—thF™omGpu˜li™—tionsGess—ysG—r™hivesGHHHQVSFphpF PHHSF
7.1 Para Saber Mais
• ertigo muito ˜om so˜re eteˆ
httpXGG—d—ptivep—thF™omGpu˜li™—tionsGess—ysG—r™hivesGHHHQVSFphp
• …s—ndo €yƒ„ ™om eteˆ
httpXGGwwwFdotpixF™omF˜rG wendelGprojetosG—j—xGpostˆwvrttp‚equestGsumqetFhtml
IS
• xão use innerr„wv
httpXGGsl—yero0™eF™omG—rti™lesGinnerr„wv•—ltern—tivesG5intro
• €ágin— o(™i—l do tƒyx
httpXGGwwwFjsonForgG
• hr„wv
httpXGGwwwFquirksmodeForgGjsG™ross•dhtmlFhtml
• ixemplos em ej—x
httpXGGwwwFj—psFet™F˜rG—j—xG
• w—teri—l so˜re gss
httpXGGwwwFm—ujorF™om
• hyw ˆr„wv e r„wv
httpXGGwwwF—mte™hsF™omGwQ™Gintrodu™tionFhtml
IT

Mais conteúdo relacionado

Semelhante a AJAX Tutorial - Carregar Arquivo

AJAX?? Não!! Asynchronous Javascript and... JSON!!
AJAX?? Não!! Asynchronous Javascript and... JSON!!AJAX?? Não!! Asynchronous Javascript and... JSON!!
AJAX?? Não!! Asynchronous Javascript and... JSON!!Lucas Brasilino
 
PHP e Ajax com XAJAX
PHP e Ajax com XAJAXPHP e Ajax com XAJAX
PHP e Ajax com XAJAXRafael Dohms
 
Golang para desenvolvedores pragmáticos parte 2
Golang para desenvolvedores pragmáticos  parte 2Golang para desenvolvedores pragmáticos  parte 2
Golang para desenvolvedores pragmáticos parte 2Wilson Júnior
 
Sobre o workshop "Raspagem de dados para mulheres"
Sobre o workshop "Raspagem de dados para mulheres"Sobre o workshop "Raspagem de dados para mulheres"
Sobre o workshop "Raspagem de dados para mulheres"Patricia Minamizawa
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com AjaxAdler Medrado
 
Django + extjs pelos forms
Django + extjs pelos formsDjango + extjs pelos forms
Django + extjs pelos formsMoacir Filho
 
HTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSHTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSRodrigo Branas
 
Web Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciênciaWeb Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciênciaSidney Roberto
 
Criando plugins jQuery
Criando plugins jQueryCriando plugins jQuery
Criando plugins jQueryRicardo Coelho
 
Html5 - O futuro da Web
Html5 - O futuro da WebHtml5 - O futuro da Web
Html5 - O futuro da WebJose Berardo
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2michellobo
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONAmbiente Livre
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONMarcio Junior Vieira
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessRafael Farias Silva
 
Estruturas em C++ (struct)
Estruturas em C++ (struct)Estruturas em C++ (struct)
Estruturas em C++ (struct)Márcio Rizzatto
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Luis Gustavo Almeida
 

Semelhante a AJAX Tutorial - Carregar Arquivo (20)

Ajax em java
Ajax em javaAjax em java
Ajax em java
 
AJAX?? Não!! Asynchronous Javascript and... JSON!!
AJAX?? Não!! Asynchronous Javascript and... JSON!!AJAX?? Não!! Asynchronous Javascript and... JSON!!
AJAX?? Não!! Asynchronous Javascript and... JSON!!
 
PHP e Ajax com XAJAX
PHP e Ajax com XAJAXPHP e Ajax com XAJAX
PHP e Ajax com XAJAX
 
Golang para desenvolvedores pragmáticos parte 2
Golang para desenvolvedores pragmáticos  parte 2Golang para desenvolvedores pragmáticos  parte 2
Golang para desenvolvedores pragmáticos parte 2
 
Sobre o workshop "Raspagem de dados para mulheres"
Sobre o workshop "Raspagem de dados para mulheres"Sobre o workshop "Raspagem de dados para mulheres"
Sobre o workshop "Raspagem de dados para mulheres"
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com Ajax
 
Django + extjs pelos forms
Django + extjs pelos formsDjango + extjs pelos forms
Django + extjs pelos forms
 
Artigoajax
ArtigoajaxArtigoajax
Artigoajax
 
HTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSHTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJS
 
Web Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciênciaWeb Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciência
 
Criando plugins jQuery
Criando plugins jQueryCriando plugins jQuery
Criando plugins jQuery
 
JavaScript
JavaScriptJavaScript
JavaScript
 
Html5 - O futuro da Web
Html5 - O futuro da WebHtml5 - O futuro da Web
Html5 - O futuro da Web
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2
 
o que é ajax
o que é ajaxo que é ajax
o que é ajax
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSON
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSON
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração Painless
 
Estruturas em C++ (struct)
Estruturas em C++ (struct)Estruturas em C++ (struct)
Estruturas em C++ (struct)
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
 

AJAX Tutorial - Carregar Arquivo

  • 1. AJAX - Tutorial Anselmo Luiz Éden Battisti, Christiano Julio Pilger de Brito Universidade Estadual do Oeste do Paraná Reitoria - DRI Cascavel - Paraná - Brasil anselmobattisti@yahoo.com.br, chrisjulio@gmail.com 18 de agosto de 2006 1 AJAX - Sem Mistérios eteˆ @—™rónimo em língu— ingles— de Asyncronous Javascript And XMLA é o uso sisteE máti™o de t—v—s™ript e ˆwv @e deriv—dosA p—r— torn—r o n—veg—dor m—is inter—tivo ™om o usuárioD utiliz—ndoEse de soli™it—ções —ssín™ron—s de inform—çõesF eteˆ não é somente um novo modeloD é t—m˜ém um— ini™i—tiv— n— ™onstrução de —pli™—ções web m—is dinâmiE ™—s e ™ri—tiv—sF eteˆ não é um— te™nologi—D são re—lmente vári—s te™nologi—s tr—˜—lh—ndo junt—sD ™—d— um— f—zendo su— p—rteD ofere™endo nov—s fun™ion—lid—desF eteˆ in™orpor— em seu modeloX • epresent—ção ˜—se—d— em p—drõesD us—ndo ˆr„wv e gƒƒY • ixposição e inter—ção dinâmi™— us—ndo o hywY • snter™âm˜io e m—nipul—ção de d—dos us—ndo ˆwv e ˆƒv„Y • ‚e™uper—ção —ssín™ron— de d—dos us—ndo o o˜jeto ˆwvrttp‚equestY • Javascript unindo tod—s el—s em ™onjuntoF y modelo ™lássi™o de —pli™—ção web tr—˜—lh— —ssimX e m—iori— d—s —ções do usuário n— interf—™e disp—r— um— soli™it—ção r„„€ p—r— o servidor webF y servidor pro™ess— —lgo re™uper—ndo d—dosD m—stig—ndo númerosD ™onvers—ndo ™om vários sistem—s leg—dos e então retorn— um— págin— r„wv p—r— o ™lienteF É um modelo —d—pt—do do uso origin—l d— web ™omo um —gente de hipertextoD porém o que f—z — web ˜o— p—r— hipertexto não ne™ess—ri—mente f—z el— ˜o— p—r— —pli™—ções de softw—reF ist— —proxim—ção possui muito dos sentidos té™ni™osD m—s não f—z tudo que um usuário experiente poderi— f—zerF inqu—nto o servidor está f—zendo seu tr—˜—lhoD o que o usuário est—rá f—zendoc y que é ™ertoD esper—ndoF i — ™—d— et—p— em um— t—ref—D o usuário —gu—rd— m—is um— vezF I
  • 2. y˜vi—menteD se nós estivéssemos projet—ndo — web do n—d— p—r— —pli™—çõesD não f—E rí—mos ™om que os usuários esper—ssem em vãoF …m— vez que — interf—™e está ™—rreg—d—D por que — inter—ção do usuário deveri— p—r—r — ™—d— vez que — —pli™—ção pre™is—sse de —lgo do servidorc x— re—lid—deD por que o usuário deveri— ver — —pli™—ção ir —o servidor tod— vezc e m—ior v—nt—gem d—s —pli™—ções eteˆ é que el—s rod—m no próprio n—veg—dor webF intãoD p—r— est—r há˜il — exe™ut—r —pli™—ções eteˆD ˜—st—r possuir —lgum dos n—veg—dores modernosD ou sej—D l—nç—dos —pós PHHIF ƒão elesX wozill— pirefoxD snternet ixplorer SCD yper—D uonqueror e ƒ—f—riF pigur— IX hi—gr—m— de requisições —o servidor 2 A Classe Assíncrona €—r— se f—zer um pedido r„„€ —o servidor us—ndo t—v—s™riptD vo™ê pre™is— de um o˜jeto que disponi˜iliz— ess— fun™ion—lid—deF „—l ™l—sse foi primeiro introduzid— no snternet ixE plorer so˜ — form— de um o˜jeto e™tiveˆ ™h—m—do ˆwvr„„€F intão o wozill—D o ƒ—f—ri e outros ˜rowsers seguir—mEseD implement—ndo um— ™l—sse de nome ˆwvrttp‚equest que suport—v— os métodos e —s propried—des do o˜jeto e™tiveˆ origin—l d— wi™rosoftF y ™ódigo —˜—ixo mostr— — form— genéri™— de inst—n™i—r um o˜jeto que proverá os me™—nismos p—r— pedidos —ssín™ronosF gódigo IX 9—j—xsnitFjs9 f u n c t i o n a j a x I n i t ( ) { v a r x m l h t t p ; 5 t r y { x m l h t t p = new XMLHttpRequest ( ) ; } c a t c h ( e e ) { t r y { x m l h t t p = new A c t i v e X O b j e c t ( "Msxml2.XMLHTTP" ) ; 10 } c a t c h ( e ) { t r y { x m l h t t p = new A c t i v e X O b j e c t ( "Microsoft.XMLHTTP" ) ; } c a t c h (E) { x m l h t t p = f a l s e ; 15 } } } return x m l h t t p ; 20 } ys métodos e —tri˜utos p—drões estão des™ritos —˜—ixoF 2.1 Atributos ƒegue —˜—ixo —lguns dos —tri˜utos do o˜jeto de ™onexão —ssín™ron—F P
  • 3. readyState X ™ódigo que diz o st—tus d— soli™it—ção —ssín™ron—D ele v—ri— de H —té S • H @uniniti—lizedAY • I @— ™—rreg—rAY • P @™—rreg—doAY • Q @inter—tivoAY • R @™ompletoAF status X ƒt—tus do retorno do r„wvD são os ™ódigos p—drões do r„wv PHH okD RHH no found responseText X retorn— — ™—dei— de ™—r—™teres que o servidor enviouF responseXml X retorn— o ˆwv o servidor enviouF onreadystatechange X de(ne qu—l função será ™h—m—d— p—r— f—zer — m—nipul—ção dos d—dos —ssim que houver um retornoF http•requestFonre—dyst—te™h—nge a n—meyf„hepun™tionY †—mos — ver o que é que est— função deve f—zerF €rimeiroD — função pre™is— de veri(™—r o est—do do pedidoF ƒe o est—do possui o v—lor RD isso signi(™— que — tot—lid—de d— respost— do servidor foi re™e˜id— e que pode ™ontinu—r — pro™essáEl— à vont—deF e próxim— ™ois— — veri(™—r é o ™ódigo do est—do d— respost— r„„€ do servidorF €—r— os nossos o˜jetivos só est—mos interess—dos n— respost— PHH yuF if (http_request.readyState == 4) { if (http_request.status == 200) { // deu certo } else {} } 2.2 Métodos ƒegue —˜—ixo —lguns dos métodos do o˜jeto de ™onexão —ssín™ron—F open(mode, url, boolean) • modeX „ipo d— requisiçãoD qi„ ou €yƒ„ • urlX …rl do o˜jeto soli™it—do no modo —ssín™ronoD pro questões de segur—nç— o pirefox não permite que — …‚v estej— em um servidor diferente d— págin— que est— f—zendo — soli™it—çãoF • ˜oole—nX true @—ssín™ronoA ou false @sín™ronoAF send() É o método ƒixh que —tiv— — ™onexão e f—z — requisição de inform—ções —o do™umento —˜erto pelo método y€ixF iste método possui somente um p—râmetro que serve p—r— envi—rmos d—dos extr—s —o do™umento que est—mos —™ess—ndoF …s—mos este p—râmetro qu—ndoD por exemploD no método y€ixD —™ess—mos o do™umento ™om €yƒ„ —o invés de qi„D neste ™—so os d—dos do €yƒ„ são p—ss—dos neste p—râmetro de ƒixhF Q
  • 4. 3 Exemplo 1 Solicitando um arquivo de texto xo exemplo I iremos tr—˜—lh—r ™om os elementos ˜ási™os vistos —té —gor— gódigo PX 9ixemplo I9 <!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 A r q u i v o do S e r v i d o r </ t i t l e > 5 < s c r i p t t y p e="text/javascript" s r c="ajaxInit.js"></ s c r i p t > < s c r i p t t y p e="text/javascript"> f u n c t i o n c a r r e g a r ( ) { a j a x = a j a x I n i t ( ) ; document . g e t E l e m e n t B y I d ( "texto" ) . innerHTML = "Carregando ..." ; 10 if ( a j a x ) { a j a x . open ( 'GET' , 'http ://200.201.81.38/ anselmo/ciclo/texto.txt' , t r u e ) ; a j a x . o n r e a d y s t a t e c h a n g e = f u n c t i o n ( ) { if ( a j a x . r e a d y S t a t e == 4 ) { if( a j a x . s t a t u s == 2 0 0 ) { 15 document . g e t E l e m e n t B y I d ( "texto" ) . innerHTML = a j a x . r e s p o n s e T e x t ; } } } } 20 a j a x . s e n d ( n u l l ) ; } </ s c r i p t > </head> <body> 25 <d i v i d="texto"></d i v > <i n p u t t y p e="button" v a l u e="Carregar" o n C l i c k=" carregar () "/> </body> </html> x— linh— V o™orre — ™h—m—d— p—r— — função ajaxInit() que est— dentro do —rquivo referen™i—do n— linh— SF e linh— W getElementByid('texto') 1 e innerHTML2 inserem o texto g—rreg—ndo dentro do hs† ™om o id igu—l — textoF x—s linh—s IID IP e IQ são veri(™—dos o status do pedidoD status do retorno e efetiv— inserção do ™onteúdo do —rquivo textoFtxt no hs†D respe™tiv—menteF xeste primeiro exemplo não houve nenhum pro™ess—mento por p—rte de um— lingu—gem de progr—m—ção no servidorD porém no mundo re—l ger—lmente um— ™h—m—d— no modo —ssín™rono se ™omuni™— ™om um script @€r€D tƒ€D eƒ€D ‚u˜yD gqsD €i‚v FFFAD que f—z um pro™ess—mento so˜re os d—dos — ele envi—dos e por (m retorn— o result—doD nosso próximo exemplo mostr—rá ex—t—mente istoF 4 Exemplo 2 Criando uma calculadora im nosso segundo exemplo iremos introduzir o uso de um— lingu—gem server-side re—E liz—ndo um pro™ess—mento so˜re os d—dos envi—dos no modo —ssín™ronoD isto será feito ™ri—ndo um— ™—l™ul—dor—F 1Comando em Javascript para selecionar o elemento cujo id é igual a texto. 2Comando em Javascript para inserir uma string em um elemento de modo que esta seja interpretada como código HTML. R
  • 5. xoss— ™—l™ul—dor— será ™ompost— de P ™—ix—s de texto p—r— — entr—d— dos v—lores e um— l—˜el p—r— exi˜ição dos result—dosD — úni™— oper—ção que el— re—liz— é — som—F gódigo QX 9g—l™ul—dor— r„wv9 <!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 > 5 < s c r i p t t y p e="text/javascript" s r c="ajaxInit.js"></ s c r i p t > < s c r i p t t y p e="text/javascript"> f u n c t i o n c a l c u l a r ( ) { a j a x = a j a x I n i t ( ) ; document . g e t E l e m e n t B y I d ( "resultado" ) . innerHTML = "Calculando ..." ; 10 if ( a j a x ) { a j a x . o n r e a d y s t a t e c h a n g e = r e s u l t a d o ; v1 = document . g e t E l e m e n t B y I d ( "v1" ) . v a l u e ; v2 = document . g e t E l e m e n t B y I d ( "v2" ) . v a l u e ; u r l = 'http ://200.201.81.38/ anselmo/ciclo/calcular.php?v1='+v1+'&v2='+v2 ; 15 a j a x . open ( 'GET' , u r l , t r u e ) ; a j a x . s e n d ( n u l l ) ; } } 20 f u n c t i o n r e s u l t a d o ( ) { if ( a j a x . r e a d y S t a t e == 4 ) { if( a j a x . s t a t u s == 2 0 0 ) { document . g e t E l e m e n t B y I d ( "resultado" ) . innerHTML = a j a x . r e s p o n s e T e x t ; } 25 } } </ s c r i p t > </head> <body> 30 <form name="calculadora"> <i n p u t t y p e="text" name="v1" i d="v1" s i z e="3"/> + <i n p u t t y p e="text" name="v2" i d="v2" s i z e="3"/> = < l a b e l i d="resultado"></ l a b e l > <b r/> <i n p u t t y p e="button" v a l u e="Carregar" o n C l i c k="calcular ()"/> </form> 35 </body> </html> gódigo RX 9g—l™ul—dor— €r€9 <? e c h o $_GET [ 'v1' ] + $_GET [ 'v2' ] ; ?> x— linh— II o método onreadystatechange —ssume um— função extern— — função que ™ri— o o˜jeto —j—xF e linh— IP e IQ ™ri— du—s v—riáveis que —rm—zen—m os v—lores dos ™—mpos que estão no formulárioD este d—do são pegos —tr—vés do value 3 F e v—riável url d— linh— IR irá ™onter o endereço e —s v—riáveis que serão us—d—s pelo €r€ p—r— ™—l™ul—r — som— dos result—dosF y —rquivo €r€ que re—liz— o ™ál™ulo d— som— é re—lmente simplesD ele peg— —s du—s v—riáveis v1 e v2 do array $_GET do €r€D som— seus v—lores e es™reve o result—doF 3Propiedade de alguns objetos em Javascript que retorna o conteúdo do mesmo S
  • 6. eté o momento o result—do de noss—s ™h—m—d—s —ssín™ron—s er—m es™ritos de form— diret— —tr—vés do método innerHTMLD o uso deste método é des—™onselh—do pelo ‡Qg pel—s seguinte r—zõesF • É um— propried—de desenvolvid— pel— MicrosoftD por est— r—zão proprietári—D porém — m—ior p—rte dos n—veg—dores in™orporouE—F • €or não ser p—drão est— sendo —˜olid— d—s nov—s versões destes n—veg—dores • y result—do é um string —o p—sso que o hyw é um— estrutur— hierárqui™— em ˆr„wv ys próximos dois exemplo são idênti™osD diferen™i—ndo —pen— — form— ™omo os d—dos são p—ss—dos do servidor p—r— o ™lienteD o primeiro us—ndo texto norm—l e o outro será us—do um— string no form—to JSON e hyw p—r— exi˜ir o result—do de um— requisiçãoF 5 Exemplo 3 Preenchimento um SELECT a partir de outro SELECT …m exemplo ™lássi™o do preen™himento de um SELECT — p—rtir de outro é — es™olh— d—s ™id—des de um determin—do est—doF iste re™urso é um— d—s m—iores 9pedr—s no s—p—to9 dos progr—m—dores de sistem— webD pois qu—ndo o usuário sele™ion— o est—do tod— — págin— deve ser re™—rreg—d—D in™lusive os v—lores dos dem—is ™—mpos já preen™hidosD p—r— que o SELECT ™om —s ™id—des sej— exi˜idoF gom eteˆ est— t—ref— (™— ˜em m—is fá™il pois ˜—st— que sej— feit— um— ™onsult— d—s ™id—des do est—do que est— no primeiro SELECT e inserir —s ™id—des no segundo SELECTF 5.1 Usando InnerHTML gódigo SX 9gid—des r„wv9 <!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"> 5 <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 t y p e="text/javascript" s r c="ajaxInit.js"></ s c r i p t > < s c r i p t t y p e="text/javascript"> f u n c t i o n s e l e c i o n a C i d a d e ( e s t a d o ) { 10 a j a x = a j a x I n i t ( ) ; if ( a j a x ) { a j a x . o n r e a d y s t a t e c h a n g e = e s c r e v e C i d a d e s ; 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 ) ; 15 a j a x . s e n d ( n u l l ) ; } } f u n c t i o n e s c r e v e C i d a d e s ( ) { T
  • 7. 20 if ( a j a x . r e a d y S t a t e == 4 ) { if( a j a x . s t a t u s == 2 0 0 ) { document . g e t E l e m e n t B y I d ( "cidade" ) . innerHTML = a j a x . r e s p o n s e T e x t ; } } 25 } f u n c t i o n s e l e c i o n a C i d a d e J s o n ( e s t a d o ) { a j a x = a j a x I n i t ( ) ; if ( a j a x ) { 30 a j a x . o n r e a d y s t a t e c h a n g e = e s c r e v e C i d a d e s J s o n ; 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 . s e n d ( n u l l ) ; } 35 } f u n c t i o n e s c r e v e C i d a d e s J s o n ( ) { if ( a j a x . r e a d y S t a t e == 4 ) { if( a j a x . s t a t u s == 2 0 0 ) { 40 v a r x = 0 ; v a r 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" ) ; 45 for( x =0; x<=j s o n . c i d a d e s . l e n g t h ; x++){ o p t i o n = document . c r e a t e E l e m e n t ( "option" ) ; o p t i o n . s e t A t t r i b u t e ( "value" , j s o n . c i d a d e s [ x ] . cdg ) ; 50 o p t i o n . a p p e n d C h i l d ( document . c r e a t e T e x t N o d e ( j s o n . c i d a d e s [ x ] . nm) ) ; document . g e t E l e m e n t B y I d ( document . c r e a t e T e x t N o d e ( j s o n . c i d a d e s [ x ] . nm) ) ; 55 document . g e t E l e m e n t B y I d ( "cidade2" ) . a p p e n d C h i l d ( o p t i o n ) ; } } } } 60 /∗ Remove todos os elementos f i l h o s de um elemento ∗/ f u n c t i o n l i m p a r D e s t i n o ( d e s t i n o ) { 65 o b j = document . g e t E l e m e n t B y I d ( d e s t i n o ) ; while( o b j . f i r s t C h i l d ) o b j . r e m o v e C h i l d ( o b j . f i r s t C h i l d ) ; } 70 </ 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 > 75 < 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="-">−−−</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 ><b r/> 80 < 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 > U
  • 8. 85 <hr> < 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 > 90 <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 ><b r/> < 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"> 95 <i n p u t t y p e="button" o n C l i c k="alert(eval('fred =999; wilma =777; document.write( fred + wilma);'))"/> </ s e l e c t > </form> </body> </html> gódigo TX 9gid—des €r€9 <? h e a d e r ( "Content -Type: text/html; charset=iso -8859 -1" ) ; $ e s t a d o = $_GET [ 'estado ' ] ; 5 $ c i d a d e s = "" ; if ( $ e s t a d o=="pr" ) { $ c i d a d e s .= "<option value ="1" > Tupãssi </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 >" ; 10 $ c i d a d e s .= "<option value ="4" > Pato Branco </option >" ; } if ( $ e s t a d o=="sp" ) { $ c i d a d e s .= "<option value ="5" >Mogi </option >" ; 15 $ c i d a d e s .= "<option value ="6" > Palmeiras </option >" ; $ c i d a d e s .= "<option value ="7" > Santos </option >" ; } e c h o $ c i d a d e s ; 20 ?> y —rquivo gid—desFphp ger— os elementos options que serão inseridos dentro do SE- LECT d—s ™id—desF ist— —˜ord—gem não é muito inteligente pois — qu—ntid—de de inforE m—ção tr—nsmitid—s do servidor p—r— o ™liente em su— m—iori— foi desne™essári—F h— ™id—de —pen—s o ™ódigo e o nome deveri—m ser tr—nsmitidosD —s dem—is inform—ções são repetid—s e podem ser ger—d—s pelo n—veg—dorF x— linh— QI do ™ódigo fonte S é feit— — veri(™—ção se um dos elementos do SELECT est—do foi sele™ion—doD se sim então envie o v—lor p—r— — função selecionaCidadeF y ™ódigo fonte T — v—riável est—do é re™e˜id— e de —™ordo ™om el— é p—ss—do —o n—veE g—dor —s opções do SELECT ™id—deF 5.2 Usando JSON tƒyx @™om — mesm— pronun™i— do nome 4t—son4em inglêsAD um —™rônimo p—r— Javascript Object NotationD é um form—to leve p—r— inter™âm˜io de d—dos ™omput—™ion—isF tƒyx é V
  • 9. um su˜™onjunto d— not—ção de o˜jeto de t—v—s™riptD m—s seu uso não requer t—v—s™ript ex™lusiv—menteF e simpli™id—de de tƒyx tem result—do em seu uso difundidoD espe™i—lmente ™omo um— —ltern—tiv— p—r— ˆwv em eteˆF …m— d—s v—nt—gens reivindi™—d—s de tƒyx so˜re ˆwv ™omo um form—to p—r— inter™âm˜io de d—dos neste ™ontextoD é o f—to de ser muito m—is fá™il es™rever um —n—lis—dor tƒyxF im t—v—s™ript mesmoD tƒyx pode ser —n—lis—do triviE —lmente us—ndo — função ev—l@AF ssto foi import—nte p—r— — —™eit—ção de tƒyx dentro d— ™omunid—de eteˆ devido — presenç— deste re™urso de t—v—s™ript em todos os n—veg—dores web —tu—isF x— práti™—D os —rgumentos — respeito d— f—™ilid—de de desenvolvimento e perform—n™e do —n—lis—dor são r—r—mente relev—dos devido —os interesses de segur—nç— no uso de ev—l@A e — ™res™ente integr—ção de pro™ess—mento ˆwv nos n—veg—dores web modernosF €or est— r—zão tƒyx é tipi™—mente us—do em —m˜ientes onde o t—m—nho do )uxo de d—dos entre o ™liente e o servidor é de supr— importân™i— @d—í seu uso por qoogleD ‰—hooD et™FD os qu—is servem milhões de usuáriosAD onde — fonte dos d—dos pode ser expli™it—mente ™on(ávelD e onde — perd— dos re™ursos de pro™ess—mento ˆƒv„ no l—do ™liente p—r— m—nipul—ção de d—dos ou ger—ção d— interf—™eD não é um— ™onsider—çãoF inqu—nto tƒyx é freqüentemente posi™ion—do 4em ™onfronto4™om ˆwvD não é in™oE mum ver t—nto tƒyx ™omo ˆwv sendo us—dos n— mesm— —pli™—çãoF €or exemploD um— —pli™—ção no l—do ™liente — qu—l integr— d—dos do qoogle w—ps ™om d—dos —tmosféri™os —tr—vés de ƒye€D requer suporte p—r— —m˜os form—tos de d—dosF pigur— PX eutom—to que ger— — lingu—gem tƒyx e (gur— P ilustr— em form— de um —utôm—to (nito — gr—máti™— d— lingu—gem JSONF e string —˜—ixo mostr— um retorno d—s ™id—des do est—do do €—r—náF { 'cidades':[ {'cdg':'1','nm':'Tupãssi'}, {'cdg':'2','nm':'Toledo'}, {'cdg':'3','nm':'Cascavel'}, {'cdg':'4','nm':'Pato Branco'} ] } …s—ndo — função eval4 do Javascript podemos tr—nsform—r est— string em um— estruE tur— de o˜jetos f—™ilmente m—nipuláveisF ƒe us—rmos — função eval no retorno d—s ™id—des poderi—mos por exemplo —™ess—r o ™ódigo d— ™id—de de €—to fr—n™o —tr—vés do seguinte ™om—ndoX 4Introduzida na especicação 1.0 do Javascript esta função interpreta uma string como uma expressão, eval(fred=999; wilma=777; document.write(fred + wilma);) retorna 1776 W
  • 10. json = eval((+ajax.responseText+)); json.cidades[3].cdg; x— primeir— linh— é —pli™—d— — função eval e seu result—do é —rm—zen—do n— v—riável jsonD n— linh— P é —™ess—do o —tri˜uto ™id—desD que é um vetorD n— posição Q no —tri˜uto ™dgF €—r— um exemplo ™ompleto vej— os ™ódigos —˜—ixoF gódigo UX 9gid—des r„wv9 !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 5 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 t y p e=text/javascript s r c=ajaxInit.js/ s c r i p t s c r i p t t y p e=text/javascript 10 f u n c t i o n s e l e c i o n a C i d a d e J s o n ( e s t a d o ) { a j a x = a j a x I n i t ( ) ; if ( a j a x ) { a j a x . o n r e a d y s t a t e c h a n g e = e s c r e v e C i d a d e s J s o n ; u r l = 'http ://200.201.81.38/ anselmo/ciclo/cidadesJson.php?estado='+e s t a d o ; 15 a j a x . open ( 'GET' , u r l , t r u e ) ; a j a x . s e n d ( n u l l ) ; } } 20 f u n c t i o n e s c r e v e C i d a d e s J s o n ( ) { if ( a j a x . r e a d y S t a t e == 4 ) { if( a j a x . s t a t u s == 2 0 0 ) { v a r x = 0 ; v a r j s o n = e v a l ( (+a j a x . r e s p o n s e T e x t+) ) ; 25 l i m p a r D e s t i n o ( cidade2 ) ; for( x =0; x=j s o n . c i d a d e s . l e n g t h ; x++){ 30 o p t i o n = document . c r e a t e E l e m e n t ( option ) ; o p t i o n . s e t A t t r i b u t e ( value , j s o n . c i d a d e s [ x ] . cdg ) ; o p t i o n . a p p e n d C h i l d ( document . c r e a t e T e x t N o d e ( j s o n . c i d a d e s [ x ] . nm) ) ; 35 document . g e t E l e m e n t B y I d ( document . c r e a t e T e x t N o d e ( j s o n . c i d a d e s [ x ] . nm) ) ; document . g e t E l e m e n t B y I d ( cidade2 ) . a p p e n d C h i l d ( o p t i o n ) ; } 40 } } } /∗ 45 Remove todos os elementos f i l h o s de um elemento ∗/ f u n c t i o n l i m p a r D e s t i n o ( d e s t i n o ) { o b j = document . g e t E l e m e n t B y I d ( d e s t i n o ) ; while( o b j . f i r s t C h i l d ) 50 o b j . r e m o v e C h i l d ( o b j . f i r s t C h i l d ) ; } / s c r i p t IH
  • 11. /head 55 body form name=selecioneCidade l a b e l for=estado a c c e s s k e y=euE/us 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 60 o p t i o n v a l u e=prPR/o p t i o n o p t i o n v a l u e=spSP/o p t i o n / s e l e c t b r/ l a b e l for=cidade a c c e s s k e y=cuC/ui d a d e : / l a b e l 65 s e l e c t name=cidade i d=cidade2 / s e l e c t /form /body /html gódigo VX 9gid—des €r€9 ? h e a d e r ( Content -Type: text/html; charset=iso -8859 -1 ) ; $ e s t a d o = $_GET [ 'estado ' ] ; 5 $ c i d a d e s = {'cidades ':[ ; if ( $ e s t a d o==pr ) { $ c i d a d e s .= {'cdg ':'1','nm ':'Tupãssi '}, {'cdg ':'2','nm ':'Toledo '}, {'cdg ':'3','nm ':'Cascavel '}, 10 {'cdg ':'4','nm ':'Pato Branco '}]} ; } if ( $ e s t a d o==sp ) { $ c i d a d e s .= {'cdg ':'5','nm ':'Mogi '}, 15 {'cdg ':'6','nm ':'Palmeiras '}, {'cdg ':'7','nm ':'Santos '}]} ; } e c h o $ c i d a d e s ; 20 ? ‚evis—ndo o gódigo V podemos ver que — linh— P ™h—m— — função headerD nel— é p—ss—do o ™om—ndo charset=iso88591D isto é muito import—nte pois diz — ™odi(™—ção do texto que est— sendo retorn—doD evit—ndo —ssim que o n—veg—dor do usuário exi˜— de form— in™orret— os —™entos e outros ™—r—™teres espe™i—isF gom os exemplos —™im— pudemos ter um— ˜o— noção de ™omo utiliz—r o —j—x em noss—s —pli™—ções webD m—sD queremos ™ois—s m—is dinâmi™—s e ™om efeitos por isso v—mos f—zer um pequeno Google Sugest 6 Sugerindo um Conteúdo xosso próximo exemplo ™onsistirá em um ™—mpo de texto que — ™—d— te™l— pression—d— irá —o servidor e tr—rá um— list— de p—l—vr—s que ™ome™em ™om o que já foi es™ritoF ssto será exi˜ido em um— hs†F u—ndo ™li™—rmos em um— d—s p—l—vr—s que vier—m do servidor — hs† irá sumir e o texto irá p—r— dentro d— ™—ix— de textoF II
  • 12. iste sistem— é utiliz—do por exemplo no serviço de eEm—il do YahooD neleD qu—ndo digit—Ese o nome do ™ont—to ele já v—i (ltr—ndo os que ™omeç—m ™om —s letr—s já digit—d—sF gódigo WX 9euto gomplet—r r„wv9 !DOCTYPE HTML PUBLIC -//W3C//DTD HTML 3.2 Final//EN html head t i t l e Auto Completar / t i t l e 5 s c r i p t t y p e=text/javascript s r c=ajaxInit.js/ s c r i p t s c r i p t t y p e=text/javascript f u n c t i o n s u g e r i r ( s ) { a j a x = a j a x I n i t ( ) ; document . g e t E l e m e n t B y I d ( resultado ) . innerHTML = Calculando ... ; 10 if ( a j a x ) { a j a x . o n r e a d y s t a t e c h a n g e = r e s u l t a d o ; 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 . s e n d ( n u l l ) ; 15 } } f u n c t i o n r e s u l t a d o ( ) { if ( a j a x . r e a d y S t a t e == 4 ) { 20 if( 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+) ) ; v a r x = 0 ; l i m p a r D e s t i n o ( resultado ) ; document . g e t E l e m e n t B y I d ( 'resultado ') . s t y l e . v i s i b i l i t y ='visible ' ; 25 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 . a p p e n d C h i l d ( document . c r e a t e T e x t N o d e ( 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 . g e t E l e m e n t B y I d ( resultado ) . a p p e n d C h i l d (P) ; 30 } } } } 35 /∗ Remove todos os elementos f i l h o s de um elemento ∗/ f u n c t i o n l i m p a r D e s t i n o ( d e s t i n o ) { o b j = document . g e t E l e m e n t B y I d ( d e s t i n o ) ; 40 while( o b j . f i r s t C h i l d ) o b j . r e m o v e C h i l d ( o b j . f i r s t C h i l d ) ; } / s c r i p t s t y l e t y p e=text/css 45 #r e s u l t a d o { background−c o l o r : #e 5 e 5 e 5 ; b o r d e r : 1 px s o l i d #000; w id th : 150 px ; p a d d i n g : 0 px ; 50 margin : 0 px ; p o s i t i o n : r e l a t i v e ; margin−l e f t : 45 px ; margin−t o p : 0 px ; } 55 p { l i n e −h e i g h t : 15 px ; margin : 0 px ; f o n t : 18 px Arial , s a n s −s e r i f ; IP
  • 13. p a d d i n g : 5 px ; 60 } p : h o v e r { background−c o l o r : #c d c d c d ; c u r s o r : p o i n t e r ; } 65 / 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=palP a l a v r a / l a b e l 70 i n p u t t y p e=text i d=pal name=pal onKeyUp=sugerir(document.getElementById ('pal ').value)/ d i v i d=resultado s t y l e=visibility : hidden/d i v /form /body /html gódigo IHX 9euto gomplet—r €r€9 ? $p [ 0 ] = abacate ; $p [ 1 ] = abobora ; $p [ 2 ] = banana ; 5 $p [ 3 ] = beco ; $p [ 4 ] = cabo ; $p [ 5 ] = cebo ; $p [ 6 ] = dedo ; $p [ 7 ] = dado ; 10 $p [ 8 ] = elefante ; $p [ 9 ] = faca ; $p [ 1 0 ] = gato ; $p [ 1 1 ] = porta ; 15 $ s e a r c h = $_GET [ 's' ] ; $x = 0 ; $ r e s = {'pal ':[ ; for ( $x = 0 ; $x 11; $x++){ if( $ 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 ) ) ) { 20 $ 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 .= ]} ; 25 e c h o $ r e s ; ? †—mos —n—lis—r o gódigo WD n— linh— PR é ™h—m—d— — função style5 Fvisibility6 de(ne que o result—do est— o™ultoF x— linh— PV du—s funções são —di™ion—d—s —o p—rágr—fo ™om o texto que veio do servidorD — primeir— função ™olo™— — p—l—vr— dentro d— ™—ix— de texto e — segund— função es™onde o hs† result—doF egor— v—mos ver o gódigo IH em €r€D existe um vetor ™h—m—do 6p ™om IP p—l—vr—sD — linh— IU e PH mont—m — string no form—to jsonD — linh— PQ remove — virgul— d— últim— p—l—vr—F 5Acessa os estilos em CSS em um objeto 6Atributo que dene se o objeto esta visível 'visible' ou oculto 'hidden' IQ
  • 14. 6.1 Ligando a um Banco de Dados e integr—ção de eteˆ ™om ˜—n™os de d—dos não difere em n—d— do que foi feito —té —gor—D pois —o (m do uso do ˜—n™o de d—dos pelo ™liente o servidor envi— um— string de volt—F xosso exemplo us—rá o mesmo —rquivo r„wv do ™ódigo —nteriorD —pen—s modi(™—reE mos o —rquivo Fphp que será ™h—m—do por eleF gódigo IIX 9gonexão ™om o f—n™o9 ?php # FileName=Connection_php_mysql.htm # Type=MYSQL # HTTP=true 5 $hostname_conexao = localhost ; $ d a t a b a s e _ c o n e x a o = test ; $username_conexao = aluno ; $password_conexao = aluno ; $ c o n e x a o = mysql_pconnect ( $hostname_conexao , $username_conexao , $password_conexao ) o r d i e ( m y s q l _ e r r o r ( ) ) ; 10 m y s q l _ s e l e c t _ d b ( $ d a t a b a s e _ c o n e x a o , $ c o n e x a o ) ; ? gódigo IPX 9euto gomplet—r …s—ndo f—n™o de h—dos9 ? i n c l u d e ( conexao.php ) ; $ s e a r c h = $_GET [ 's' ] ; 5 $ 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 , $ c o n e x a o ) ; $ l i n h a s = m y s q l _ f e t c h _ a r r a y ( $ c o n s u l t a ) ; 10 $ r e s = {'pal ':[ ; 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 = m y s q l _ f e t c h _ a r r a y ( $ c o n s u l t a ) ) ; 15 $ 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 .= ]} ; e c h o $ r e s ; ? y ™ódigo II ™ri— um— ™onexão ™om o ˜—n™o de d—dosD — linh— W ™one™t— ™om o servidor us—ndo o usuário e senh— e — linh— IH ini™i— o uso do ˜—n™o de d—dos –textF y ™ódigo IP f—z — pesquis— dos muni™ípios no ˜—n™o de d—dosD n— linh— P é in™luíd— o —rquivo que f—z — ™onexãoD n— linh— R — v—riável 6se—r™h re™e˜e — p—l—vr— que foi digit—d— n— ™—ix— de textoD n— linh— IQ o ™om—ndo str_replace7 foi utiliz—do p—r— evit—r pro˜lem—s ™om p—l—vr—s que por ventur— ™ontenh—m —sp—s simples ™omo por exemplo ¤d9—gu—¤D se este tr—t—mento não for feito n— hor— de ™h—m—r — função eval o™orreri— um erroF 7 Vantagens no uso do Ajax elguns ˜enefí™ios que temos —o us—r eteˆ sãoX 7Substitui todas as ocorrências da string procurada na string de retorno IR
  • 15. • „orn— possível utiliz—r um— —pli™—ção ˜—se—d— n— web ™om re™urso e fun™ion—lid—des p—re™idos ™om os que possuímos hoje em nossos sistem—s DesktopF ssto torn— o uso dos —pli™—tivos web re—lmente usáveisY • gomo — modi(™—ção d—s inform—ções d— tel— são p—r™i—is um— gr—nde qu—ntid—de de inform—ções deix— de tr—feg—r inutimente pel— redeY • y servidor que rod— — —pli™—ção (™— menor ™—rreg—do pois existe um— divisão de t—ref—s ™om o ™lienteY • eteˆ não é um— te™nologi— por isto não é ne™essário p—g—r p—r— — utiliz—rF €orém ™omo já dizi— o poet— 4nem tudo são )ores 4D temos queX • eteˆ não é — solução mil—gros— p—r— todos os m—les e se us—do de form— in—dequ—d— pode pior—r um— situ—ção que já er— fei—Y • ys x—veg—dores us—m diferentes métodos por isso temos que est—r —tentos qu—nto — eles p—r— não impossi˜ilit—r o uso de nossos sistem—s por t—is n—veg—doresY • gomo existe um— divisão de pro™ess—mente entre o ™liente e o servidorD temos que minimiz—r este pro™ess—mento pois os x—veg—dor em ger—l não suport— um— ™—rg— muito pes—d— de scriptsY • ys ˜otão volt—rD —v—nç— e históri™o não fun™ion—m muito ˜em ™om eteˆF Referências ‘I“ irko fridee de elmeid— g—˜rer—F AJAX Visão ConceitualF €ort—l t—v—D PHHSF ‘P“ ƒteve q—nzF Alternatives to innerHTMLF ƒl—yery0™eD PHHTF ‘Q“ tesse t—mes q—rrettF ej—xX e new —ppro—™h to we˜ —ppli™—tionsD httpXGG—d—ptivep—thF™omGpu˜li™—tionsGess—ysG—r™hivesGHHHQVSFphpF PHHSF 7.1 Para Saber Mais • ertigo muito ˜om so˜re eteˆ httpXGG—d—ptivep—thF™omGpu˜li™—tionsGess—ysG—r™hivesGHHHQVSFphp • …s—ndo €yƒ„ ™om eteˆ httpXGGwwwFdotpixF™omF˜rG wendelGprojetosG—j—xGpostˆwvrttp‚equestGsumqetFhtml IS
  • 16. • xão use innerr„wv httpXGGsl—yero0™eF™omG—rti™lesGinnerr„wv•—ltern—tivesG5intro • €ágin— o(™i—l do tƒyx httpXGGwwwFjsonForgG • hr„wv httpXGGwwwFquirksmodeForgGjsG™ross•dhtmlFhtml • ixemplos em ej—x httpXGGwwwFj—psFet™F˜rG—j—xG • w—teri—l so˜re gss httpXGGwwwFm—ujorF™om • hyw ˆr„wv e r„wv httpXGGwwwF—mte™hsF™omGwQ™Gintrodu™tionFhtml IT