Escolar Documentos
Profissional Documentos
Cultura Documentos
Tutorial de AJAX PDF
Tutorial de AJAX PDF
Introduo de AJAX
AJAX est para Asynchronous JavaScript and XML.
HTML / XHTML
JavaScript
JavaScript
XML
HTML
CSS
O objeto de XMLHttpRequest
Usando o objeto de XMLHttpRequest, um colaborador da web standart pode
atualizar uma pgina com dados do usurio depois que a pgina carregou!
AJAX foi feito popular em 2005 pela Google (com Google suggest(Sugerir)).
Google Suggest est usando o objeto de XMLHttpRequest criar uma relao muito
dinmica da web interface: Quando voc comea datilografar na caixa da busca do
Google, um Javascript emite as letras fora a um usurio e o usurio retorna uma lista das
sugestes.
O objeto de XMLHttpRequest suportado no Internet Explorer 5.0+, no Safari 1.2, no
Mozilla 1.0/Firefox, pera 8+, e no Netscape 7.
Exemplo de AJAX
Sua primeira aplicao em AJAX
Para compreender como AJAX trabalha, ns criaremos uma aplicao pequena de
AJAX.
Primeiramente, ns estamos indo criar um formulrio padro do HTML com os dois
campos do texto: username e time. O campo do username ser preenchido pelo usurio
e o campo do time ser preenchido dentro usando AJAX.
O arquivo do HTML ser nomeado testAjax.htm, e olha como esta (observao que o
formulrio do HTML abaixo tem nenhum submeter tecla!):
<html>
<body>
<form name="myForm">
Name: <input type="text" name="username" />
Time: <input type="text" name="time" />
</form>
</body>
</html>
Exemplo explicado:
Criar primeiramente um xmlHttp varivel para prender o objeto de XMLHttpRequest.
Tentar ento criar o objeto com xmlHttp=new XMLHttpRequest(). Isto para os
browsers de Firefox, de pera, e de Safari. Se isso falhar, tentativa xmlHttp=new
ActiveXObject("Msxml2.XMLHTTP") o qual para o Internet Explorer 6.0+, se
Depois que um pedido ao usurio, ns necessitamos de uma funo que possa receber
os dados que so retornados pelo usurio.
A propriedade do onreadystatechange armazena a funo que processar a resposta de
um usurio. O seguinte cdigo define uma funo vazia e ajusta a propriedade do
onreadystatechange ao mesmo tempo:
xmlHttp.onreadystatechange=function()
{
// ns estamos indo escrever aqui algum cdigo
}
A propriedade do readyState
Os pedidos no so inicializados
A propriedade do responseText
Os dados emitidos para trs do usurio podem ser recuperados com a propriedade do
responseText.
Em nosso cdigo, ns ajustaremos o valor de nosso campo da entrada do time(tempo)
igual ao responseText:
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
document.myForm.time.value=xmlHttp.responseText;
}
}
O captulo seguinte faz nossa aplicao de AJAX completa com o script de time.asp.
Nota: Expiram os sets da propriedade quanto tempo (nos minutos) uma pgina cached
em um browser antes que expire. Se um usurio retornar mesma pgina antes que
expire, a verso cached est indicada. (Response.Expires = -1) indica que a pgina
nunca cached.
Como voc pode ver justo um formulrio simples do HTML com um campo da
entrada chamado txt1 .
Um atributo do evento para o campo da entrada define uma funo a ser provocada pelo
evento do onkeyup.
O pargrafo abaixo do formulrio contem uma extenso chamada txtHint. A extenso
usada como um placeholder para os dados recuperados do web server.
Quando os dados de entradas do usurio, uma funo chamaram o showHint()
executado. A execuo da funo provocada pelo evento do onkeyup. Em outras
palavras: Cada vez que o usurio move seu dedo longe de uma chave de teclado dentro
do campo da entrada, o showHint da funo est chamado.
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;
}
First Name:
<input type="text" id="txt1"
onkeyup="showHint(this.value)">
</form>
<p>Suggestions: <span id="txtHint"></span></p>
</body>
</html>
O AJAX JavaScript
Este o cdigo do Javascript, armazenado no arquivo clienthint.js:
var xmlHttp;
function showHint(str) {
if (str.length==0) {
document.getElementById("txtHint").innerHTML="";
return;
}
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null) {
alert ("Your browser does not support AJAX!");
return;
}
var url="gethint.asp";
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;
}
for i=1 to 30
if q=ucase(mid(a(i),1,len(q))) then
if hint="" then
hint=a(i)
else
hint=hint & " , " & a(i)
end if
end if
next
end if
'Output "no suggestion" if no hint were found
'or output the correct values
if hint="" then
response.write("no suggestion")
else
response.write(hint)
end if
%>
$a[]="Violet";
$a[]="Liza";
$a[]="Elizabeth";
$a[]="Ellen";
$a[]="Wenche";
$a[]="Vicky";
//get the q parameter from URL
$q=$_GET["q"];
//lookup all hints from array if length of q>0
if (strlen($q) > 0)
{
$hint="";
for($i=0; $i<count($a); $i++)
{
if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q))))
{
if ($hint=="")
{
$hint=$a[$i];
}
else
{
$hint=$hint." , ".$a[$i];
}
}
}
}
// Set output to "no suggestion" if no hint were found
// or to the correct values
if ($hint == "")
{
$response="no suggestion";
}
else
{
$response=$hint;
}
//output the response
echo $response;
?>
<html>
<head>
<script src="selectcustomer.js"></script>
</head>
<body>
<form>
Select a Customer:
<select name="customers" onchange="showCustomer(this.value)">
<option value="ALFKI">Alfreds Futterkiste
<option value="NORTS ">North/South
<option value="WOLZA">Wolski Zajazd
</select>
</form>
<p>
<div id="txtHint"><b> O cliente info ser listado aqui.</b></div>
</p>
</body>
</html>
Como voc pode ver justo um formulrio simples do HTML com uma gota
encaixota para baixo Customer.
O pargrafo abaixo do formulrio contem um txtHint chamado div. O div
usado como um placeholder para o info recuperado do web server.
Quando o usurio seleciona dados, uma funo chamada showCustomer ()
est executada. A execuo da funo provocada pelo evento do
onchange. Em outras palavras: Cada vez que a mudana que do usurio o
valor na gota encaixota para baixo, o showCustomer da funo chamado.
O cdigo do Javascript alistado abaixo.
O AJAX JavaScript
Este o cdigo do Javascript armazenado no arquivo selectcustomer.js:
var xmlHttp
function showCustomer(str)
{
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
{
alert ("Your browser does not support AJAX!");
return;
}
var url="getcustomer.asp";
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;
}
next
rs.MoveNext
loop
response.write("</table>")
%>
A base de dados
A base de dados que ns nos estaremos usando em olhares deste exemplo como est:
id
FirstName
LastName
Age
Hometown
Job
Peter
Griffin
41
Quahog
Brewery
Lois
Griffin
40
Newport
Piano Teacher
Joseph
Swanson
39
Quahog
Police Officer
Glenn
Quagmire
41
Quahog
Pilot
O formulrio do HTML
O exemplo acima contem um formulrio simples do HTML e uma ligao a um
Javascript:
<html>
<head>
<script src="selectuser.js"></script>
</head>
<body>
<form>
Select a User:
<select name="users" onchange="showUser(this.value)">
<option value="1">Peter Griffin</option>
<option value="2">Lois Griffin</option>
O JavaScript
Este o cdigo do Javascript armazenado no arquivo selectuser.js:
var xmlHttp
function showUser(str) {
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null) {
alert ("Browser does not support HTTP Request")
return
}
var url="getuser.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 || xmlHttp.readyState=="complete") {
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;
}
O exemplo explicou
stateChanged() e as funes de GetXmlHttpObject() so as mesmas que no AJAX de
PHP sugerir o captulo.
A funo do showUser()
Se um artigo for selecionado a funo executar o seguinte:
1.
2.
3.
4.
5.
6.
7.
A pgina PHP
A pgina do usurio chamou-se pelo Javascript, um arquivo simples de PHP
chamada getuser.php.
A pgina escrita em PHP e usa um banco de dados de MySQL.
O cdigo funciona com uma pergunta ao MySQL de encontro a uma base de
dados e retorna o resultado como uma tabela do HTML:
<?php
$q=$_GET["q"];
$con = mysql_connect('localhost', 'peter', 'abc123');
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("ajax_demo", $con);
$sql="SELECT * FROM user WHERE id = '".$q."'";
$result = mysql_query($sql);
echo "<table border='1'>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
<th>Hometown</th>
<th>Job</th>
</tr>";
while($row = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['FirstName'] . "</td>";
echo "<td>" . $row['LastName'] . "</td>";
echo "<td>" . $row['Age'] . "</td>";
echo "<td>" . $row['Hometown'] . "</td>";
echo "<td>" . $row['Job'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysql_close($con);
?>
Exemplo explicado
Quando a pergunta emitida do Javascript pgina de PHP o seguinte acontece:
1. PHP abre uma conexo a um usurio de MySQL
2. O user com o nome especificado encontrado
3. Uma tabela criada e os dados so introduzidos e emitidos ao placeholder do
txtHint
Como voc pode ver justo um formulrio simples do HTML com uma gota simples
encaixota para baixo CD chamados.
O pargrafo abaixo do formulrio contem um txtHint chamado div. O div usado
como um placeholder para o info recuperado do web server.
Quando o usurio seleciona dados, uma funo chamada showCD est executada. A
execuo da funo provocada pelo evento do onchange. Em outras palavras: Cada
vez que a mudana que do usurio o valor na gota encaixota para baixo, o showCD da
funo chamado.
O cdigo do Javascript alistado abaixo.
O AJAX JavaScript
Este o cdigo do 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.asp";
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
{
O formulrio do HTML
O exemplo acima contem um formulrio simples do HTML e uma ligao a um
Javascript:
<html>
<head>
<script src="selectcd.js"></script>
</head>
<body>
<form>
Select a CD:
<select name="cds" onchange="showCD(this.value)">
<option value="Bob Dylan">Bob Dylan</option>
<option value="Bee Gees">Bee Gees</option>
<option value="Cat Stevens">Cat Stevens</option>
</select>
</form>
<p>
<div id="txtHint"><b>CD info will be listed here.</b></div>
</p>
</body>
</html>
Exemplo explicado
Como voc pode ver justo um formulrio simples do HTML com um select simples
chamados CD.
O pargrafo abaixo do formulrio contem um txtHint chamado div. O div usado
como um placeholder para o info recuperado do web server.
Quando o usurio seleciona dados, uma funo chamada showCD est executada. A
execuo da funo provocada pelo evento do onchange.
Em outras palavras: Cada vez que o usurio muda o valor do campo select, o showCD
da funo est chamado.
O arquivo XML
COUNTRY>UK</COUNTRY>
COMPANY>Pickwick</COMPANY>
PRICE>8.50</PRICE>
YEAR>1990</YEAR>
</CD>
CD>
TITLE>Romanza</TITLE>
ARTIST>Andrea Bocelli</ARTIST>
COUNTRY>EU</COUNTRY>
COMPANY>Polydor</COMPANY>
PRICE>10.80</PRICE>
YEAR>1996</YEAR>
</CD>
CD>
TITLE>When a man loves a woman</TITLE>
ARTIST>Percy Sledge</ARTIST>
COUNTRY>USA</COUNTRY>
COMPANY>Atlantic</COMPANY>
PRICE>8.70</PRICE>
YEAR>1987</YEAR>
</CD>
CD>
TITLE>Black angel</TITLE>
ARTIST>Savage Rose</ARTIST>
COUNTRY>EU</COUNTRY>
COMPANY>Mega</COMPANY>
PRICE>10.90</PRICE>
YEAR>1995</YEAR>
</CD>
CD>
TITLE>1999 Grammy Nominees</TITLE>
ARTIST>Many</ARTIST>
COUNTRY>USA</COUNTRY>
COMPANY>Grammy</COMPANY>
PRICE>10.20</PRICE>
YEAR>1999</YEAR>
</CD>
CD>
TITLE>For the good times</TITLE>
ARTIST>Kenny Rogers</ARTIST>
COUNTRY>UK</COUNTRY>
COMPANY>Mucik Master</COMPANY>
PRICE>8.70</PRICE>
YEAR>1995</YEAR>
</CD>
CD>
TITLE>Big Willie style</TITLE>
ARTIST>Will Smith</ARTIST>
COUNTRY>USA</COUNTRY>
COMPANY>Columbia</COMPANY>
PRICE>9.90</PRICE>
YEAR>1997</YEAR>
</CD>
CD>
TITLE>Tupelo Honey</TITLE>
ARTIST>Van Morrison</ARTIST>
COUNTRY>UK</COUNTRY>
COMPANY>Polydor</COMPANY>
PRICE>8.20</PRICE>
YEAR>1971</YEAR>
</CD>
CD>
TITLE>Soulsville</TITLE>
ARTIST>Jorn Hoel</ARTIST>
COUNTRY>Norway</COUNTRY>
COMPANY>WEA</COMPANY>
PRICE>7.90</PRICE>
YEAR>1996</YEAR>
</CD>
CD>
TITLE>The very best of</TITLE>
ARTIST>Cat Stevens</ARTIST>
COUNTRY>UK</COUNTRY>
COMPANY>Island</COMPANY>
PRICE>8.90</PRICE>
YEAR>1990</YEAR>
</CD>
CD>
TITLE>Stop</TITLE>
ARTIST>Sam Brown</ARTIST>
COUNTRY>UK</COUNTRY>
COMPANY>A and M</COMPANY>
PRICE>8.90</PRICE>
YEAR>1988</YEAR>
</CD>
CD>
TITLE>Bridge of Spies</TITLE>
ARTIST>T'Pau</ARTIST>
COUNTRY>UK</COUNTRY>
COMPANY>Siren</COMPANY>
PRICE>7.90</PRICE>
YEAR>1987</YEAR>
</CD>
CD>
TITLE>Private Dancer</TITLE>
ARTIST>Tina Turner</ARTIST>
COUNTRY>UK</COUNTRY>
COMPANY>Capitol</COMPANY>
PRICE>8.90</PRICE>
YEAR>1983</YEAR>
</CD>
CD>
TITLE>Midt om natten</TITLE>
ARTIST>Kim Larsen</ARTIST>
COUNTRY>EU</COUNTRY>
COMPANY>Medley</COMPANY>
PRICE>7.80</PRICE>
YEAR>1983</YEAR>
</CD>
CD>
TITLE>Pavarotti Gala Concert</TITLE>
ARTIST>Luciano Pavarotti</ARTIST>
COUNTRY>UK</COUNTRY>
COMPANY>DECCA</COMPANY>
PRICE>9.90</PRICE>
YEAR>1991</YEAR>
</CD>
CD>
TITLE>The dock of the bay</TITLE>
ARTIST>Otis Redding</ARTIST>
COUNTRY>USA</COUNTRY>
COMPANY>Atlantic</COMPANY>
PRICE>7.90</PRICE>
YEAR>1987</YEAR>
</CD>
CD>
TITLE>Picture book</TITLE>
ARTIST>Simply Red</ARTIST>
COUNTRY>EU</COUNTRY>
COMPANY>Elektra</COMPANY>
PRICE>7.20</PRICE>
YEAR>1985</YEAR>
</CD>
CD>
TITLE>Red</TITLE>
ARTIST>The Communards</ARTIST>
COUNTRY>UK</COUNTRY>
COMPANY>London</COMPANY>
PRICE>7.80</PRICE>
YEAR>1987</YEAR>
</CD>
CD>
TITLE>Unchain my heart</TITLE>
ARTIST>Joe Cocker</ARTIST>
COUNTRY>USA</COUNTRY>
COMPANY>EMI</COMPANY>
PRICE>8.20</PRICE>
YEAR>1987</YEAR>
</CD>
</CATALOG>
O JavaScript
Aqui fica o cdigo JavaScript no arquivo "selectcd.js":
var xmlHttp
function showCD(str)
{
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("Browser does not support HTTP Request")
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 || xmlHttp.readyState=="complete")
{
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;
}
Exemplo explicado
stateChanged() e as funes de GetXmlHttpObject so as mesmas que no ltimo
captulo.
A funo showCD()
Se um select for selecionado a funo executar o seguinte:
Convida a funo de GetXmlHttpObject para criar um objeto de xmlHttp
Define o URL (nome do arquivo) para emitir ao usurio
Adiciona um parmetro (q) ao URL com o ndice do campo da entrada
Adiciona um nmero aleatrio para impedir que o usurio use um arquivo
cached
5. A chamada stateChanged quando uma mudana provocada
6. Abre o objeto de XMLHTTP com o URL dado.
7. Emite um pedido do HTTP ao usurio
1.
2.
3.
4.
A pgina PHP
O usurio paginou chamado pelo Javascript, um arquivo simples de PHP chamada
getcd.php.
A pgina escrita em PHP usando o XML DOM carregar o original cd_catalog.xml
de XML.
O cdigo funciona uma pergunta de encontro ao arquivo XML e retorna o resultado
como o HTML:
<?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 />");
}
}
?>
Exemplo explicado
Quando a pergunta emitida do Javascript pgina de PHP o seguinte acontece:
1. PHP cra um objeto de XML DOM do arquivo de cd_catalog.xml.
2. Todos os elementos do artista (nodetypes = 1) so dados laos completamente
para encontrar um nome combinar esse emitido do Javascript.
3. O CD que contem o artista correto encontrado.
4. A informao do album emitida ao placeholder do txtHint.
<body>
<form action="">
Select a Customer:
<select name="customers" onchange="showCustomer(this.value)">
<option value="ALFKI">Alfreds Futterkiste</option>
<option value="NORTS ">North/South</option>
<option value="WOLZA">Wolski Zajazd</option>
</select>
</form>
<b><span id="companyname"></span></b><br />
<span id="contactname"></span><br />
<span id="address"></span>
<span id="city"></span><br/>
<span id="country"></span>
</body>
</html>
O exemplo acima contem um formulrio do HTML com uma gota encaixota para baixo
clientes chamados.
Quando o usurio seleciona um cliente na caixa dropdown, uma funo chamada
showCustomer() est executada. A execuo da funo provocada pelo evento do
onchange. Em outras palavras: Cada vez que a mudana que do usurio o valor na
gota encaixota para baixo, o showCustomer() da funo chamado.
O cdigo do Javascript alistado abaixo.
O AJAX JavaScript
Este o cdigo do Javascript armazenado no arquivo selectcustomer_xml.js:
var xmlHttp
function showCustomer(str)
{
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
{
alert ("Your browser does not support AJAX!");
return;
}
var url="getcustomer_xml.asp";
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)
{
var xmlDoc=xmlHttp.responseXML.documentElement;
document.getElementById("companyname").innerHTML=
xmlDoc.getElementsByTagName("compname")[0].childNodes[0].nodeValue;
document.getElementById("contactname").innerHTML=
xmlDoc.getElementsByTagName("contname")[0].childNodes[0].nodeValue;
document.getElementById("address").innerHTML=
xmlDoc.getElementsByTagName("address")[0].childNodes[0].nodeValue;
document.getElementById("city").innerHTML=
xmlDoc.getElementsByTagName("city")[0].childNodes[0].nodeValue;
document.getElementById("country").innerHTML=
xmlDoc.getElementsByTagName("country")[0].childNodes[0].nodeValue;
}
}
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;
}
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open(Server.Mappath("/db/northwind.mdb"))
set rs=Server.CreateObject("ADODB.recordset")
rs.Open sql, conn
if err <> 0 then
response.write(err.description)
set rs=nothing
set conn=nothing
else
response.write("<?xml version='1.0' encoding='ISO-8859-1'?>")
response.write("<company>")
response.write("<compname>" &rs.fields("companyname")& "</compname>")
response.write("<contname>" &rs.fields("contactname")& "</contname>")
response.write("<address>" &rs.fields("address")& "</address>")
response.write("<city>" &rs.fields("city")& "</city>")
response.write("<country>" &rs.fields("country")& "</country>")
response.write("</company>")
end if
on error goto 0
%>
A base de dados
A base de dados que ns nos estaremos usando em olhares deste exemplo como este:
id
FirstName
LastName
Age
Hometown
Job
Peter
Griffin
41
Quahog
Brewery
Lois
Griffin
40
Newport
Piano Teacher
Joseph
Swanson
39
Quahog
Police Officer
Glenn
Quagmire
41
Quahog
Pilot
O formulrio do HTML
O exemplo acima contem um formulrio simples do HTML e uma ligao a um
Javascript:
<html>
<head>
<script src="responsexml.js"></script>
</head>
<body>
<form>
Select a User:
<select name="users" onchange="showUser(this.value)">
<option value="1">Peter Griffin</option>
<option value="2">Lois Griffin</option>
<option value="3">Glenn Quagmire</option>
<option value="4">Joseph Swanson</option>
</select>
</form>
<h2><span id="firstname"></span>
<span id="lastname"></span></h2>
<span id="job"></span>
<div style="text-align: right">
<span id="age_text"></span>
<span id="age"></span>
<span id="hometown_text"></span>
<span id="hometown"></span>
</div>
</body>
</html>
Em outras palavras: Cada vez que o usurio muda o valor no campo select, o
showUser() da funo chamado e outputs o resultado nos elementos especificados do
<span>.
O JavaScript
Este o cdigo do Javascript armazenado no arquivo responsexml.js:
var xmlHttp
function showUser(str) {
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null){
alert ("Browser does not support HTTP Request")
return
}
var url="responsexml.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 || xmlHttp.readyState=="complete") {
xmlDoc=xmlHttp.responseXML;
document.getElementById("firstname").innerHTML=
xmlDoc.getElementsByTagName("firstname")[0].childNodes[0].nodeValue;
document.getElementById("lastname").innerHTML=
xmlDoc.getElementsByTagName("lastname")[0].childNodes[0].nodeValue;
document.getElementById("job").innerHTML=
xmlDoc.getElementsByTagName("job")[0].childNodes[0].nodeValue;
document.getElementById("age_text").innerHTML="Age: ";
document.getElementById("age").innerHTML=
xmlDoc.getElementsByTagName("age")[0].childNodes[0].nodeValue;
document.getElementById("hometown_text").innerHTML="<br/>From: ";
document.getElementById("hometown").innerHTML=
xmlDoc.getElementsByTagName("hometown")[0].childNodes[0].nodeValue;
}
}
function GetXmlHttpObject() {
var objXMLHttp=null
if (window.XMLHttpRequest) {
objXMLHttp=new XMLHttpRequest()
} else if (window.ActiveXObject) {
objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
}
return objXMLHttp
}
O exemplo explicou
O showUser() e as funes de GetXmlHttpObject so o mesmo que no captulo da
base de dados de AJAX de PHP.
A funo stateChanged()
Se um artigo no select selecionado a funo executar o seguinte:
1.
2.
A pgina de PHP
A pgina do usurio chamou-se pelo Javascript, um arquivo simples de PHP chamada
responsexml.php.
A pgina escrita em PHP e usa um databse de MySQL.
O cdigo funciona uma pergunta do SQL de encontro a uma base de dados e retorna o
resultado como um original de XML:
<?php
header('Content-Type: text/xml');
header("Cache-Control: no-cache, must-revalidate");
//A date in the past
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
$q=$_GET["q"];
$con = mysql_connect('localhost', 'peter', 'abc123');
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("ajax_demo", $con);
$sql="SELECT * FROM user WHERE id = ".$q."";
$result = mysql_query($sql);
echo '<?xml version="1.0" encoding="ISO-8859-1"?>
<person>';
while($row = mysql_fetch_array($result))
{
echo "<firstname>" . $row['FirstName'] . "</firstname>";
echo "<lastname>" . $row['LastName'] . "</lastname>";
echo "<age>" . $row['Age'] . "</age>";
echo "<hometown>" . $row['Hometown'] . "</hometown>";
echo "<job>" . $row['Job'] . "</job>";
}
echo "</person>";
mysql_close($con);
?>
O exemplo explicou
Quando a pergunta emitida do Javascript pgina de PHP o seguinte acontece:
1.
2.
3.
4.
5.
6.
AJAX AppML
Que AppML?
Historia
Em 1999, a equipe de funcionrios em W3Schools comeou a desenvolver
AppML.
Em setembro 2000, um projeto do desenvolvimento para um cliente noruegus
grande foi comeado. O objetivo do projeto era converter um sistema de
informao enorme de uma aplicao desktop de Windows a uma aplicao
moderna da Internet usando somente AppML.