对了,给大家推荐一本书,叫做《Ajax基础教程》,是Ryan Asleson和Nathaniel.T.Schutta写的,金灵译的,感觉这本书写得非常不错,理论全面,例子详细,技术点又很直接,我看了两天,就有一窍不通到了通了两三窍的地步,起码自己可以编出想要实现的功能。如果你是初学或是以前对Ajax了解不多,建议你读一下,不会花很多时间,但非常有用。有一点要指出,这本书的服务器端用的是Java的servlet,所以你若是要编.NET或PHP的,自己翻译一下后台代码就可以。
我做的这个即时提醒的主要流程是在登录后首页一Load时触发一个javascript 方法,这个方法每个一定时间向后台发一个请求,后台从数据库读出数据并作相应处理,向前台返回一个XML文档,前台javascript处理方法解析XML文档,并写进一个div中,最后显示div。
好了,废话不多说,写一下代码就明了了。
//前台页面a.htm,后台处理页面b.aspx
//a.htm中代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page</title>
<script type="text/javascript">
var xmlHttp;
var num=0;
//创建xmlhttp对象
function createXMLHttpRequest()
{
if(window.ActiveXObject)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
else if(window.XMLHttpRequest)
{
xmlHttp=new XMLHttpRequest();
}
}
//调用入口
function dostart()
{
createXMLHttpRequest();
var url="b.aspx";
xmlHttp.open("GET",url,true);
xmlHttp.onreadystatechange=startcallback;
xmlHttp.send(null);
}
//处理响应程序
function startcallback()
{
if(xmlHttp.readystate==4)
{
if(xmlHttp.status==200)
{
refreshmessage();
}
}
}
//刷新信息处理
function refreshmessage()
{
//获得XML节点
var rp=xmlHttp.responseXML;
var resp=rp.selectSingleNode("Response");
var md=resp.selectSingleNode("messageD");
var mw=resp.selectSingleNode("messageW");
var mm=resp.selectSingleNode("messageM");
var messageD=md.text;
var messageW=mw.text;
var messageM=mm.text;
if(messageD=="0")
{
messageD="今天没有员工合同到期";
}
else
{
messageD="今天有"+md.text+"名员工合同到期";
}
if(messageW=="0")
{
messageW="本周没有员工合同到期";
}
else
{
messageW="本周将有有"+mw.text+"名员工合同到期";
}
if(messageM=="0")
{
messageM="本月没有员工合同到期";
}
else
{
messageM="本月将有有"+mm.text+"名员工合同到期";
}
//向网页中写入提示信息
var c0=document.getElementById("col0");
var c1=document.getElementById("col1");
var c2=document.getElementById("col2");
c0.innerHTML=messageD;
c1.innerHTML=messageW;
c2.innerHTML=messageM;
var divr= document.getElementById("divremind");
//显示div
divr.style.display="";
setTimeout("dostart()",300000);
}
</script>
</head>
<body style="background-color:#5BCBF5" οnlοad="dostart()">
<div id="divremind" style="width: 239px; height: 154px; display:none " >
<table style="width: 236px; height: 111px">
<tr ><font color="red">合同到期提醒</font>
</tr>
<tr id="row0">
<td id="col0">
</td>
</tr>
<tr id="row1">
<td id="col1">
</td>
</tr>
<tr id="row2">
<td id="col2">
</td>
</tr>
</tr>
</table>
</div>
</body>
</html>
//b.aspx.cs中代码
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
public partial class b: System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// Sql语句
//获取三种合同提醒人数
string sqld = "select count(Cdayremind) from ContractInfo where datediff(dd,getdate(),Cend)<=0 and Cdayremind=0";
string sqlw = "select count(Cweekremind) from ContractInfo where datediff(dd,getdate(),Cend)<=7 and Cweekremind=0";
string sqlm = "select count(Cmonthremind) from ContractInfo where datediff(dd,getdate(),Cend)<=30 and Cmonthremind=0";
string messageD="0";
string messageW="0";
string messageM="0";
//SQLDBOperater为数据库操作类
SQLDBOperater dbo = new SQLDBOperater();
try
{
dbo.Connect();
dbo.BeginTransAction();
DataTable dtd = dbo.SelectToDataTableTA(sqld);
DataTable dtw = dbo.SelectToDataTableTA(sqlw);
DataTable dtm = dbo.SelectToDataTableTA(sqlm);
dbo.CommitTransAction();
if (dtd.Rows.Count > 0)
{
messageD = dtd.Rows[0][0].ToString().Trim();
}
if (dtw.Rows.Count > 0)
{
messageW = dtw.Rows[0][0].ToString().Trim();
}
if (dtm.Rows.Count > 0)
{
messageM = dtm.Rows[0][0].ToString().Trim();
}
}
catch (Exception ex)
{
dbo.RollbackTransAction();
}
finally
{
dbo.CloseConnection();
}
//编写xml文档
StringBuilder res = new StringBuilder();
res.Append("<messageD>" + messageD + "</messageD>");
res.Append("<messageW>"+messageW+"</messageW>");
res.Append("<messageM>"+messageM+"</messageM>");
//向前台发送xml
Response.ContentType = "text/xml";
Response.CacheControl = "no-cache";
Response.Write("<Response>");
Response.Write(res);
Response.Write("</Response>");
Response.End();
}
}
OK,这个简单的Ajax已经完成了,相信看了代码后,你也能编出一些简单的应用了。其实我感觉Ajax本身没什么,只要你把Javascript,xml和其他一些编程语言搞懂,结合起来灵活运用就没问题。