PHP and AJAX XML Example
AJAX can be used for interactive communication with an XML
file.
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
CD info will be listed here.
This example consists of four pages:
- a simple HTML form
- an XML file
- a JavaScript
- a PHP page
The HTML Form
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="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>
|
Example Explained
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 changes the value in the drop down box, the function showCD is
called.
The XML File
The XML file is "cd_catalog.xml".
This document contains a CD collection.
The JavaScript
This is the JavaScript code stored in the file "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;
}
|
Example Explained
The stateChanged() and GetXmlHttpObject functions are the same as in the last
chapter, you can go to the previous page for an explanation of those
The showCD() Function
If an item in the drop down box is selected the function
executes the following:
- Calls on the GetXmlHttpObject function to create an XMLHTTP object
- 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
- Call stateChanged when a change is triggered
- Opens the XMLHTTP object with the given url.
- Sends an HTTP request to the server
The PHP Page
The server paged called by the JavaScript, is a simple PHP file called
"getcd.php".
The page is written in PHP using the XML DOM to load the XML document "cd_catalog.xml".
The code runs a query against the XML file and returns the result as 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 />");
}
}
?>
|
Example Explained
When the query is sent from the JavaScript to the PHP page the following
happens:
- PHP creates an XML DOM object of the "cd_catalog.xml" file
- All "artist" elements (nodetypes = 1) are looped through to find a
name matching the one sent from the JavaScript.
- The CD containing the correct artist is found
- The album information is output and sent to the "txtHint" placeholder
|
|
|
See why there are 20,000+ Ektron integrations worldwide.
Request an INSTANT DEMO or download a FREE TRIAL today. |
|
|
|