对应的HTML页面程序的代码如下所示。在该程序中除了与Ajax相关的程序基本框架之外,读者需要特别关注一下使用DOM操作HTML文档中对应元素的方法。
源程序名称:main.htm
<html>
<head>
<title>shopping online</title>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<link href="images/css.css" type="text/css" rel="stylesheet">
</head>
<script type="text/javascript">
var datadiv;
var datatablebody;
var curelement;
var xmlhttpreq = false;
//创建xmlhttprequest对象
function createxmlhttprequest() {
if(window.xmlhttprequest) { //mozilla 浏览器
xmlhttpreq = new xmlhttprequest();
}
else if (window.activexobject) { // IE浏览器
try {
xmlhttpreq = new activexobject("msxml2.xmlhttp");
} catch (e) {
try {
xmlhttpreq = new activexobject("microsoft.xmlhttp");
} catch (e) {}
}
}
}
//发送请求函数
function getdetail(element) {
datatablebody = document.getelementbyid("databody");
datadiv = document.getelementbyid("popup");
createxmlhttprequest();
curelement = element;
var url = "tipservlet?key=" + escape(element.id);
xmlhttpreq.open("get", url, true);
xmlhttpreq.onreadystatechange = processresponse;//指定响应函数
xmlhttpreq.send(null); // 发送请求
}
// 处理返回信息函数
function processresponse() {
if (xmlhttpreq.readystate == 4) { // 判断对象状态
if (xmlhttpreq.status == 200) { // 信息已经成功返回,开始处理信息
setdata(xmlhttpreq.responsexml);
} else { //页面不正常
window.alert("您所请求的页面有异常。");
}
}
}
// 显示提示框
function setdata(data) {
cleardata();
setoffsets();
var content = data.getelementsbytagname("content")[0].firstchild.data;
var row = createrow(content);
datatablebody.appendchild(row);
}
//生成表格内容行
function createrow(data) {
var row, cell, txtnode;
row = document.createelement("tr");
cell = document.createelement("td");
cell.setattribute("bgcolor", "#fffafa");
cell.setattribute("border", "0");
txtnode = document.createtextnode(data);
cell.appendchild(txtnode);
row.appendchild(cell);
return row;
}
//设置显示位置
function setoffsets() {
datadiv.style.border = "black 1px solid";
var top = 0;
while(curelement) {
top += curelement["offsettop"];
curelement = curelement.offsetparent;
}
datadiv.style.left = 50 + "px";
datadiv.style.top = top + "px";
}
// 清除提示框
function cleardata() {
var ind = datatablebody.childnodes.length;
for (var i = ind - 1; i >= 0 ; i--) {
datatablebody.removechild(datatablebody.childnodes[i]);
}
datadiv.style.border = "none";
}
</script>
<body leftmargin="0" topmargin="0">
<table cellspacing="0" cellpadding="0" width="778" align="center" border="0">
<tbody>
<tr>
<td height="10"></td>
</tr>
</tbody>
</table>
<table height="148" cellspacing="0" cellpadding="0" width="778" align="center" border="0">
<tbody>
<tr valign="top">
<td width="236">
<table width="375" height="340">
<!--dwlayouttable-->
<tbody>
<tr>
<td width="348" height="1">
</td>
<td height="1" width="29"></td>
</tr>
<tr>
<td height="13" width="348">
<table id="autonumber1" style="border- collapse: collapse" bordercolor="#111111" height="20" cellspacing="0" cellpadding="0" width="151" background="images/fu.gif" border="0">
<tbody>
<tr>
<td align="center" width="82">
<b>精品推荐</b>
</td>
<td align="center">
</td>
</tr>
</tbody>
</table>
</td>
<td height="13" width="29">
</td>
</tr>
<tr>
<td valign="top" height="328" width="348">
<table cellspacing="0" cellpadding="0" width="103%" border="0">
<tbody>
<tr>
<td width="50%">
<img id="1" onm- ouseover="getdetail(this);" onmouseout="cleardata();" src="images/ibmt43bb4.jpg" vspace="6" border="0" alt="">
<a><b>
<br>
</td>
<td width="50%">
<br>
商品名称:
ibm-t43bb
<br>
会员价:2500元
<br>
</td>
</tr>
<tr>
<td width="50%">
<img id="2" onm- ouseover="getdetail(this);" onmouseout="cleardata();" src="images/hpnc4200.jpg" vspace="6" border="0" alt="">
</td>
<td width="50%">
<br>
商品名称:
hp-nc4200
<br>
<br>
会员价: 1150元
<br>
</td>
</tr>
……
<tr>
<td valign="top" colspan="4" height="16" width="776">
</td>
</tr>
</tbody>
</table>
<div style="position:absolute;" id="popup">
<table bgcolor="#fffafa" border="0" cellspacing="2" cellpadding="2" />
<tbody id="databody">
</tbody>
</table>
</div>
</body>
</html>