AJAX可用于以XML返回数据库信息
。 AJAXDatabase转XML实例(测试说明:该实例功能未实现)
在下面的AJAX实例中
,我们将演示网页如何从My
SQL数据库中读取信息
,把数据转换为XML文档,并在不同的地方使用这个文档来显示信息
。 本例与上一节中的"
PHPAJAXDatabase"这个例子很相似,不过有一个很大的不同:在本例中,我们通过使用responseXML函数从
PHP页面得到的是XML形式的数据。
把XML文档作为响应来接收,使我们有能力更新页面的多个位置,而不仅仅是接收一个PHP输出并显示出来。
在本例中,我们将使用从数据库接收到的信息来更新多个<span>元素。
在下拉列表中选择一个名字
SelectaUser:PeterGriffinLoisGriffinJosephSwansonGlennQuagmire
此列由四个元素组成:
My
SQL数据库
简单的HTML表单
JavaScript
PHP页面
数据库
将在本例中使用的数据库看起来类似这样:
idFirstNameLastNameAgeHometownJob
1PeterGriffin41QuahogBrewery
2LoisGriffin40NewportPianoTeacher
3JosephSwanson39QuahogPoliceOfficer
4GlennQuagmire41QuahogPilot
HTML表单
上面的例子包含了一个简单的HTML表单,以及指向JavaScript的链接:
<html>
<head>
<scriptsrc="responsexml.js"></script>
</head>
<body>
<form>
SelectaUser:
<selectname="users"onchange="showUser(this.value)">
<optionvalue="1">PeterGriffin</option>
<optionvalue="2">LoisGriffin</option>
<optionvalue="3">GlennQuagmire</option>
<optionvalue="4">JosephSwanson</option>
</select>
</form>
<h2>
<spanid="firstname"></span> <spanid="lastname"></span>
</h2>
<spanid="job"></span>
<divstyle="text-align:right">
<spanid="age_text"></span>
<spanid="age"></span>
<spanid="hometown_text"></span>
<spanid="hometown"></span>
</div>
</body>
</html>
例子解释-HTML表单
HTML表单是一个下拉列表,其name属性的值是"users",可选项的值与数据库的id字段相对应
表单下面有几个<span>元素,它们用作我们所接收到的不同的值的占位符
当用户选择了具体的选项,函数"showUser()"就会执行。该函数的执行由"onchange"事件触发
换句话说,每当用户在下拉列表中改变了值,函数showUser()就会执行,并在指定的<span>元素中输出结果。
JavaScript
这是存储在文件"responsexml.js"中的JavaScript代码:
varxmlHttp
functionshowUser(str)
{
xmlHttp=GetXmlHttpObject()
if(xmlHttp==null)
{
alert("BrowserdoesnotsupportHTTPRequest")
return
}
varurl="responsexml.php"
url=url+"?q="+str
url=url+"&sid="+Math.random()
xmlHttp.onreadystatechange=stateChanged
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}
functionstateChanged()
{
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;
}
}
functionGetXmlHttpObject()
{
varobjXMLHttp=null
if(window.XMLHttpRequest)
{
objXMLHttp=newXMLHttpRequest()
}
elseif(window.ActiveXObject)
{
objXMLHttp=newActiveXObject("Microsoft.XMLHTTP")
}
returnobjXMLHttp
}
例子解释:
showUser()与GetXmlHttpObject函数与PHP和AJAXMySQL数据库实例这一节中的例子是相同的。您可以参阅其中的相关解释。
stateChanged()函数
如果选择了下拉列表中的项目,该函数执行:
通过使用responseXML函数,把"xmlDoc"变量定义为一个XML文档
从这个XML文档中取回数据,把它们放在正确的"span"元素中
PHP页面
这个由JavaScript调用的
服务器页面,是一个名为"responsexml.php"的简单的PHP文件。
该页面由PHP编写,并使用MySQL数据库。
代码会运行一段针对数据库的SQL查询,并以XML文档返回结果:
<?php
header('Content-Type:text/xml');
header("Cache-Control:no-cache,must-revalidate");
//Adateinthepast
header("Expires:Mon,26Jul199705:00:00GMT");
$q=$_GET["q"];
$con=
mysql_connect('localhost','peter','abc123');
if(!$con)
{
die('Couldnotconnect:'.
mysql_error());
}
mysql_select_db("ajax_demo",$con);
$sql="SELECT*FROMuserWHEREid=".$q."";
$result=mysql_query($sql);
echo'<?xmlversion="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);
?>
例子解释:
当查询从JavaScript送达PHP页面时,会发生:
PHP文档的content-type被设置为"text/xml"
PHP文档被设置为"no-cache",以防止缓存
用HTML页面送来的数据设置$q变量
PHP打开与MySQL
服务器的连接
找到带有指定id的"user"
以XML文档输出数据