|
AJAX stands for Asynchronous
JavaScript And XML.
AJAX is a type of
programming made popular in
2005 by Google (with Google
Suggest).
AJAX is not a new
programming language, but a
new way to use existing
standards.
With AJAX you can create
better, faster, and more
user-friendly web
applications.
AJAX is based on JavaScript
and HTTP requests.
What You Should Already Know
Before you continue you
should have a basic
understanding of the
following:
• HTML / XHTML
• JavaScript
________________________________________
AJAX = Asynchronous
JavaScript and XML
AJAX is not a new
programming language, but a
technique for creating
better, faster, and more
interactive web
applications.
With AJAX, your JavaScript
can communicate directly
with the server, using the
JavaScript XMLHttpRequest
object. With this object,
your JavaScript can trade
data with a web server,
without reloading the page.
AJAX uses asynchronous data
transfer (HTTP requests)
between the browser and the
web server, allowing web
pages to request small bits
of information from the
server instead of whole
pages.
The AJAX technique makes
Internet applications
smaller, faster and more
user-friendly.
AJAX is a browser technology
independent of web server
software.
________________________________________
AJAX is Based on Web
Standards
AJAX is based on the
following web standards:
• JavaScript
• XML
• HTML
• CSS
The web standards used in
AJAX are well defined, and
supported by all major
browsers. AJAX applications
are browser and platform
independent.
________________________________________
AJAX is About Better
Internet Applications
Web applications have many
benefits over desktop
applications; they can reach
a larger audience, they are
easier to install and
support, and easier to
develop.
However, Internet
applications are not always
as "rich" and user-friendly
as traditional desktop
applications.
With AJAX, Internet
applications can be made
richer and more
user-friendly.
________________________________________
You Can Start Using AJAX
Today
There is nothing new to
learn.
AJAX is based on existing
standards. These standards
have been used by most
developers for several
years.
AJAX Uses HTTP Requests
In traditional JavaScript
coding, if you want to get
any information from a
database or a file on the
server, or send user
information to a server, you
will have to make an HTML
form and GET or POST data to
the server. The user will
have to click the "Submit"
button to send/get the
information, wait for the
server to respond, then a
new page will load with the
results.
Because the server returns a
new page each time the user
submits input, traditional
web applications can run
slowly and tend to be less
user-friendly.
With AJAX, your JavaScript
communicates directly with
the server, through the
JavaScript XMLHttpRequest
object
With an HTTP request, a web
page can make a request to,
and get a response from a
web server - without
reloading the page. The user
will stay on the same page,
and he or she will not
notice that scripts request
pages, or send data to a
server in the background.
________________________________________
The XMLHttpRequest Object
By using the XMLHttpRequest
object, a web developer can
update a page with data from
the server after the page
has loaded!
AJAX was made popular in
2005 by Google (with Google
Suggest).
Google Suggest is using the
XMLHttpRequest object to
create a very dynamic web
interface: When you start
typing in Google's search
box, a JavaScript sends the
letters off to a server and
the server returns a list of
suggestions.
The XMLHttpRequest object is
supported in Internet
Explorer 5.0+, Safari 1.2,
Mozilla 1.0 / Firefox, Opera
8+, and Netscape 7.
Your First AJAX Application
To understand how AJAX
works, we will create a
small AJAX application.
First, we are going to
create a standard HTML form
with two text fields:
username and time. The
username field will be
filled in by the user and
the time field will be
filled in using AJAX.
The HTML file will be named
"testAjax.htm", and it looks
like this (notice that the
HTML form below has no
submit button!):
<html>
<body>
<form name="myForm">
Name: <input type="text"
name="username" />
Time: <input type="text"
name="time" />
</form>
</body>
</html>
The next chapters will
explain the keystones of
AJAX.
AJAX - Browser Support
The keystone of AJAX is the
XMLHttpRequest object.
Different browsers use
different methods to create
the XMLHttpRequest object.
Internet Explorer uses an
ActiveXObject, while other
browsers uses the built-in
JavaScript object called
XMLHttpRequest.
To create this object, and
deal with different
browsers, we are going to
use a "try and catch"
statement. You can read more
about the try and catch
statement in our JavaScript
tutorial.
Let's update our "testAjax.htm"
file with the JavaScript
that creates the
XMLHttpRequest object:
<html>
<body>
<script type="text/javascript">
function ajaxFunction()
{
var xmlHttp;
try
{
// Firefox, Opera 8.0+,
Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlHttp=new
ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Your browser does not
support AJAX!");
return false;
}
}
}
}
</script>
<form name="myForm">
Name: <input type="text"
name="username" />
Time: <input type="text"
name="time" />
</form>
</body>
</html>
Example explained: First
create a variable xmlHttp to
hold the XMLHttpRequest
object.
Then try to create the
object with XMLHttp=new
XMLHttpRequest(). This is
for the Firefox, Opera, and
Safari browsers. If that
fails, try xmlHttp=new
ActiveXObject("Msxml2.XMLHTTP")
which is for Internet
Explorer 6.0+, if that also
fails, try xmlHttp=new
ActiveXObject("Microsoft.XMLHTTP")
which is for Internet
Explorer 5.5+
If none of the three methods
work, the user has a very
outdated browser, and he or
she will get an alert
stating that the browser
doesn't support AJAX.
Note: The browser-specific
code above is long and quite
complex. However, this is
the code you can use every
time you need to create an
XMLHttpRequest object, so
you can just copy and paste
it whenever you need it. The
code above is compatible
with all the popular
browsers: Internet Explorer,
Opera, Firefox, and Safari.
The next chapter shows how
to use the XMLHttpRequest
object to communicate with
the server.
AJAX - More About the
XMLHttpRequest Object
Before sending data to the
server, we have to explain
three important properties
of the XMLHttpRequest
object.
The onreadystatechange
Property
After a request to the
server, we need a function
that can receive the data
that is returned by the
server.
The onreadystatechange
property stores your
function that will process
the response from a server.
This is not a method, the
function is stored in the
property to be called
automatically. The following
code sets the
onreadystatechange property
and stores an empty function
inside it:
xmlHttp.onreadystatechange=function()
{
// We are going to write
some code here
}
The readyState Property
The readyState property
holds the status of the
server's response. Each time
the readyState changes, the
onreadystatechange function
will be executed.
Here are the possible values
for the readyState property:
State Description
0 The request is not
initialized
1 The request has been set
up
2 The request has been sent
3 The request is in process
4 The request is complete
We are going to add an If
statement to the
onreadystatechange function
to test if our response is
complete (this means that we
can get our data):
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
// Get the data from the
server's response
}
}
The responseText Property
The data sent back from the
server can be retrieved with
the responseText property.
In our code, we will set the
value of our "time" input
field equal to responseText:
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
document.myForm.time.value=xmlHttp.responseText;
}
}
AJAX - Sending a Request to
the Server
To send off a request to the
server, we use the open()
method and the send()
method.
The open() method takes
three arguments. The first
argument defines which
method to use when sending
the request (GET or POST).
The second argument
specifies the URL of the
server-side script. The
third argument specifies
that the request should be
handled asynchronously. The
send() method sends the
request off to the server.
If we assume that the HTML
and ASP file are in the same
directory, the code would
be:
xmlHttp.open("GET","time.asp",true);
xmlHttp.send(null);
Now we must decide when the
AJAX function should be
executed. We will let the
function run "behind the
scenes" when the user types
something in the username
text field:
<form name="myForm">
Name: <input type="text"
onkeyup="ajaxFunction();"
name="username" />
Time: <input type="text"
name="time" />
</form>
Our updated AJAX-ready
"testAjax.htm" file now
looks like this:
<html>
<body>
<script
type="text/javascript">
function ajaxFunction()
{
var xmlHttp;
try
{
// Firefox, Opera 8.0+,
Safari
xmlHttp=new
XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new
ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlHttp=new
ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Your browser does not
support AJAX!");
return false;
}
}
}
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
document.myForm.time.value=xmlHttp.responseText;
}
}
xmlHttp.open("GET","time.asp",true);
xmlHttp.send(null);
}
</script>
<form name="myForm">
Name: <input type="text"
onkeyup="ajaxFunction();"
name="username" />
Time: <input type="text"
name="time" />
</form>
</body>
</html>
AJAX - The Server-Side ASP
Script
Now we are going to create
the script that displays the
current server time.
The responseText property
(explained in the previous
chapter) will store the data
returned from the server.
Here we want to send back
the current time. The code
in "time.asp" looks like
this:
<%
response.expires=-1
response.write(time)
%>
Note: The Expires property
sets how long (in minutes) a
page will be cached on a
browser before it expires.
If a user returns to the
same page before it expires,
the cached version is
displayed.
Response.Expires=-1
indicates that the page will
never be cached.
________________________________________
Run Your AJAX Application
Try the AJAX application by
typing some text into the
Name text box below, then
click inside the Time text
box:
Name: Time:
The Time text box gets the
server's time from
"time.asp" file without
reloading the page!
AJAX Suggest Example
In the AJAX example below we
will demonstrate how a web
page can communicate with a
web server online as a user
enters data into a standard
HTML form.
________________________________________
Type a Name in the Box Below
First Name:
Suggestions: Johanna
________________________________________
Example Explained - The HTML
Form
The form above has the
following HTML code:
<form>
First Name:
<input type="text" id="txt1"
onkeyup="showHint(this.value)">
</form>
<p>Suggestions: <span
id="txtHint"></span></p>
As you can see it is just a
simple HTML form with an
input field called "txt1".
An event attribute for the
input field defines a
function to be triggered by
the onkeyup event.
The paragraph below the form
contains a span called
"txtHint". The span is used
as a placeholder for data
retrieved from the web
server.
When the user inputs data, a
function called "showHint()"
is executed. The execution
of the function is triggered
by the "onkeyup" event. In
other words: Each time the
user moves his finger away
from a keyboard key inside
the input field, the
function showHint is called.
________________________________________
Example Explained - The
showHint() Function
The showHint() function is a
very simple JavaScript
function placed in the
<head> section of the HTML
page.
The function contains the
following code:
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);
}
The function executes every
time a character is entered
in the input field.
If there is some input in
the text field (str.length >
0) the function executes the
following:
• Defines the url (filename)
to send to the server
• Adds a parameter (q) to
the url with the content of
the input field
• Adds a random number to
prevent the server from
using a cached file
• Creates an XMLHTTP object,
and tells the object to
execute a function called
stateChanged when a change
is triggered
• Opens the XMLHTTP object
with the given url.
• Sends an HTTP request to
the server
If the input field is empty,
the function simply clears
the content of the txtHint
placeholder.
________________________________________
Example Explained - The
GetXmlHttpObject() Function
The example above calls a
function called
GetXmlHttpObject().
The purpose of the function
is to solve the problem of
creating different XMLHTTP
objects for different
browsers.
The function is listed
below:
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;
}
________________________________________
Example Explained - The
stateChanged() Function
The stateChanged() function
contains the following code:
function stateChanged()
{
if (xmlHttp.readyState==4)
{
document.getElementById("txtHint").innerHTML=xmlHttp.responseText;
}
}
The stateChanged() function
executes every time the
state of the XMLHTTP object
changes.
When the state changes to 4
("complete"), the content of
the txtHint placeholder is
filled with the response
text.
AJAX Source Code to Suggest
Example
The source code below
belongs to the AJAX example
on the previous page.
You can copy and paste it,
and try it yourself.
________________________________________
The AJAX HTML Page
This is the HTML page. It
contains a simple HTML form
and a link to a JavaScript.
<html>
<head>
<script
src="clienthint.js"></script>
</head>
<body>
<form>
First Name:
<input type="text" id="txt1"
onkeyup="showHint(this.value)">
</form>
<p>Suggestions: <span
id="txtHint"></span></p>
</body>
</html>
The JavaScript code is
listed below.
________________________________________
The AJAX JavaScript
This is the JavaScript code,
stored in the file
"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;
}
________________________________________
The AJAX Server Page - ASP
and PHP
There is no such thing as an
AJAX server. AJAX pages can
be served by any internet
server.
The server page called by
the JavaScript in the
example from the previous
chapter is a simple ASP file
called "gethint.asp".
Below we have listed two
examples of the server page
code, one written in ASP and
one in PHP.
________________________________________
AJAX ASP Example
The code in the
"gethint.asp" page is
written in VBScript for an
Internet Information Server
(IIS). It just checks an
array of names and returns
the corresponding names to
the client:
<%
response.expires=-1
dim a(30)
'Fill up array with names
a(1)="Anna"
a(2)="Brittany"
a(3)="Cinderella"
a(4)="Diana"
a(5)="Eva"
a(6)="Fiona"
a(7)="Gunda"
a(8)="Hege"
a(9)="Inga"
a(10)="Johanna"
a(11)="Kitty"
a(12)="Linda"
a(13)="Nina"
a(14)="Ophelia"
a(15)="Petunia"
a(16)="Amanda"
a(17)="Raquel"
a(18)="Cindy"
a(19)="Doris"
a(20)="Eve"
a(21)="Evita"
a(22)="Sunniva"
a(23)="Tove"
a(24)="Unni"
a(25)="Violet"
a(26)="Liza"
a(27)="Elizabeth"
a(28)="Ellen"
a(29)="Wenche"
a(30)="Vicky"
'get the q parameter from
URL
q=ucase(request.querystring("q"))
'lookup all hints from array
if length of q>0
if len(q)>0 then
hint=""
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
%>
________________________________________
AJAX PHP Example
The code above rewritten in
PHP.
Note: To run the entire
example in PHP, remember to
change the value of the url
variable in "clienthint.js"
from "gethint.asp" to
"gethint.php".
PHP Example
<?php
header("Cache-Control:
no-cache, must-revalidate");
// Date in the past
header("Expires: Mon, 26 Jul
1997 05:00:00 GMT");
// Fill up array with names
$a[]="Anna";
$a[]="Brittany";
$a[]="Cinderella";
$a[]="Diana";
$a[]="Eva";
$a[]="Fiona";
$a[]="Gunda";
$a[]="Hege";
$a[]="Inga";
$a[]="Johanna";
$a[]="Kitty";
$a[]="Linda";
$a[]="Nina";
$a[]="Ophelia";
$a[]="Petunia";
$a[]="Amanda";
$a[]="Raquel";
$a[]="Cindy";
$a[]="Doris";
$a[]="Eve";
$a[]="Evita";
$a[]="Sunniva";
$a[]="Tove";
$a[]="Unni";
$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;
?>
AJAX can be used for
interactive communication
with a database.
________________________________________
AJAX Database Example
In the AJAX example below we
will demonstrate how a web
page can fetch information
from a database using AJAX
technology.
________________________________________
Select a Name in the Box
Below
Select a Customer:
CustomerID WOLZA
CompanyName Wolski Zajazd
ContactName Zbyszek
Piestrzeniewicz
Address ul. Filtrowa 68
City Warszawa
PostalCode 01-012
Country Poland
________________________________________
AJAX Example Explained
The example above contains a
simple HTML form and a link
to a JavaScript:
<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>
<option value="NORTS
">North/South</option>
<option value="WOLZA">Wolski
Zajazd</option>
</select>
</form>
<p>
<div
id="txtHint"><b>Customer
info will be listed
here.</b></div>
</p>
</body>
</html>
As you can see it is just a
simple HTML form with a drop
down box called "customers".
The paragraph below the form
contains a div called
"txtHint". The div is used
as a placeholder for info
retrieved from the web
server.
When the user selects data,
a function called
"showCustomer()" is
executed. The execution of
the function is triggered by
the "onchange" event. In
other words: Each time the
user change the value in the
drop down box, the function
showCustomer is called.
The JavaScript code is
listed below.
________________________________________
The AJAX JavaScript
This is the JavaScript code
stored in the file
"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;
}
________________________________________
The AJAX Server Page
The server page called by
the JavaScript, is a simple
ASP file called
"getcustomer.asp".
The page is written in
VBScript for an Internet
Information Server (IIS). It
could easily be rewritten in
PHP, or some other server
language. Look at a
corresponding example in
PHP.
The code runs an SQL against
a database and returns the
result as an HTML table:
<%
response.expires=-1
sql="SELECT * FROM CUSTOMERS
WHERE CUSTOMERID="
sql=sql & "'" &
request.querystring("q") &
"'"
set
conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open(Server.Mappath("/db/northwind.mdb"))
set rs =
Server.CreateObject("ADODB.recordset")
rs.Open sql, conn
response.write("<table>")
do until rs.EOF
for each x in rs.Fields
response.write("<tr><td><b>"
& x.name & "</b></td>")
response.write("<td>" &
x.value & "</td></tr>")
next
rs.MoveNext
loop
response.write("</table>")
%>
AJAX XML Example
In the AJAX example below we
will demonstrate how a web
page can fetch information
from an XML file using AJAX
technology.
________________________________________
Select a CD in the Box Below
Select a CD:
TITLE: Hide your heart
ARTIST: Bonnie Tyler
COUNTRY: UK
COMPANY: CBS Records
PRICE: 9.90
YEAR: 1988
________________________________________
AJAX Example Explained
The example above contains a
simple HTML form and a link
to a 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="Bonnie
Tyler">Bonnie Tyler</option>
<option value="Dolly
Parton">Dolly
Parton</option>
</select>
</form>
<p>
<div id="txtHint"><b>CD info
will be listed
here.</b></div>
</p>
</body>
</html>
As you can see it is just a
simple HTML form with a
simple drop down box called
"cds".
The paragraph below the form
contains a div called
"txtHint". The div is used
as a placeholder for info
retrieved from the web
server.
When the user selects data,
a function called "showCD"
is executed. The execution
of the function is triggered
by the "onchange" event. In
other words: Each time the
user change the value in the
drop down box, the function
showCD is called.
The JavaScript code is
listed below.
________________________________________
The AJAX JavaScript
This is the JavaScript code
stored in the file
"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
{
// 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;
}
________________________________________
The XML File
The XML file is
"cd_catalog.xml". This
document contains a CD
collection.
________________________________________
The AJAX Server Page
The server page called by
the JavaScript, is a simple
ASP file called "getcd.asp".
The page is written in
VBScript for an Internet
Information Server (IIS). It
could easily be rewritten in
PHP, or some other server
language. Look at a
corresponding example in
PHP.
The code runs a query
against an XML file and
returns the result as HTML:
<%
response.expires=-1
q=request.querystring("q")
set
xmlDoc=Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load(Server.MapPath("cd_catalog.xml"))
set
nodes=xmlDoc.selectNodes("CATALOG/CD[ARTIST='"
& q & "']")
for each x in nodes
for each y in x.childnodes
response.write("<b>" &
y.nodename & ":</b> ")
response.write(y.text)
response.write("<br />")
next
next
%>
AJAX ResponseXML Example
In the following AJAX
example we will demonstrate
how a web page can fetch
information from a database
using AJAX technology. The
selected data from the
database will this time be
converted to an XML
document, and then we will
use the DOM to extract the
values to be displayed.
________________________________________
Select a Name in the Box
Below
Select a Customer:
North/South
Simon Crowther
South House 300 Queensbridge
London
UK
________________________________________
AJAX Example Explained
The example above contains
an HTML form, several <span>
elements to hold the
returned data, and a link to
a JavaScript:
<html>
<head>
<script
src="selectcustomer_xml.js"></script>
</head>
<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>
The example above contains
an HTML form with a drop
down box called "customers".
When the user selects a
customer in the dropdown
box, a function called
"showCustomer()" is
executed. The execution of
the function is triggered by
the "onchange" event. In
other words: Each time the
user change the value in the
drop down box, the function
showCustomer() is called.
The JavaScript code is
listed below.
________________________________________
The AJAX JavaScript
This is the JavaScript code
stored in the file
"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;
}
The showCustomer() and
GetXmlHttpObject() functions
above are the same as in
previous chapters. The
stateChanged() function is
also used earlier in this
tutorial, however; this time
we return the result as an
XML document (with
responseXML) and uses the
DOM to extract the values we
want to be displayed.
________________________________________
The AJAX Server Page
The server page called by
the JavaScript, is a simple
ASP file called
"getcustomer_xml.asp".
The page is written in
VBScript for an Internet
Information Server (IIS). It
could easily be rewritten in
PHP, or some other server
language. Look at a
corresponding example in
PHP.
The code runs an SQL query
against a database and
returns the result as an XML
document:
<%
response.expires=-1
response.contenttype="text/xml"
sql="SELECT * FROM CUSTOMERS
"
sql=sql & " WHERE
CUSTOMERID='" &
request.querystring("q") &
"'"
on error resume next
set
conn=Server.CreateObject("ADODB.Connection")
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
%>
Notice the second line in
the ASP code above:
response.contenttype="text/xml".
The ContentType property
sets the HTTP content type
for the response object. The
default value for this
property is "text/html".
This time we want the
content type to be XML.
Then we select data from the
database, and builds an XML
document with the data.
|